BigQuery ARRAY_TO_STRING 基于非数组字段中的条件
BigQuery ARRAY_TO_STRING based on condition in non-array field
我有一个 table 我这样查询...
select *
from table
where productId = 'abc123'
其中 returns 2 行(即使 productId 是唯一的)因为其中一列 (orderName) 是一个数组...
**productId, productName, created, featureCount, orderName**
abc123, someProductName, 2020-01-01, 12, someOrderName
, , , , someOtherOrderName
由于 orderName 数组扩展我的搜索结果的方式,我不确定第二行中缺失的值是空字符串还是 null,但我现在想 运行 这样的查询.. .
select productName, ARRAY_TO_STRING(orderName,'-')
from table
where productId = 'abc123'
and ifnull(featureCount,0) > 0
但是这个查询 returns...
someProductName, someOrderName-someOtherOrderName
即即使我指定了 featureCount>0.
的条件,两个数组值都返回了
我确定我遗漏了一些关于数组如何在 BigQuery 中运行的非常基本的东西,但是从 Google 的 ARRAY_TO_STRING 文档中我看不到任何方法来向提取数组值。感谢任何有关解决此问题的最佳方法的想法。
据我了解,这是因为您只是查询一行数据,其中有一列为 ARRAY<STRING>
。当您使用 ARRAY_TO_STRINGS
时,它将只接受 ARRAY<STRING>
值,您会看到所有数组值只适合一个单元格。
因此,当您 运行 您的脚本时,您的输出将符合您的标准,并且 return 带有数组的列带有额外的行以供查看。
UI 上的可视化应该类似于您在问题中提到的内容:
Row
productId
productName
created
featureCount
orderName
1
abc123
someProductName
2020-01-01
12
someOrderName
someOtherOrderName
注意:在 bigquery 上,此附加行显示为灰色(
),它是第 1 行的一部分,但它显示为附加行以提高可见性。所以这个输出在 table.
中只有 1 行
JSON 上的可视化将是:
[
{
"productId": "abc123",
"productName": "someProductName",
"created": "2020-01-01",
"featureCount": "12",
"orderName": [
"someOrderName",
"someOtherOrderName"
]
}
]
我认为没有关于如何在 UI 上可视化数组的具体文档信息,但我可以分享讨论如何 flattening
您的行输出到单行行的文档, 检查:
我使用以下方法来复制您的问题:
CREATE OR REPLACE TABLE `project-id.dataset.working_table` (
productId STRING,
productName STRING,
created STRING,
featureCount STRING,
orderName ARRAY<STRING>
);
insert into `project-id.dataset.working_table` (productId,productName,created,featureCount,orderName)
values ('abc123','someProductName','2020-01-01','12',['someOrderName','someOtherOrderName']);
insert into `project-id.dataset.working_table` (productId,productName,created,featureCount,orderName)
values ('abc123X','someProductNameX','2020-01-02','15',['someOrderName','someOtherOrderName','someData']);
产出
Row
productId
productName
created
featureCount
orderName
1
abc123
someProductName
2020-01-01
12
someOrderName
someOtherOrderName
2
abc123X
someProductNameX
2020-01-02
15
someOrderName
someOtherOrderName
someData
注意:Table 包含 2 行。
我有一个 table 我这样查询...
select *
from table
where productId = 'abc123'
其中 returns 2 行(即使 productId 是唯一的)因为其中一列 (orderName) 是一个数组...
**productId, productName, created, featureCount, orderName**
abc123, someProductName, 2020-01-01, 12, someOrderName
, , , , someOtherOrderName
由于 orderName 数组扩展我的搜索结果的方式,我不确定第二行中缺失的值是空字符串还是 null,但我现在想 运行 这样的查询.. .
select productName, ARRAY_TO_STRING(orderName,'-')
from table
where productId = 'abc123'
and ifnull(featureCount,0) > 0
但是这个查询 returns...
someProductName, someOrderName-someOtherOrderName
即即使我指定了 featureCount>0.
的条件,两个数组值都返回了我确定我遗漏了一些关于数组如何在 BigQuery 中运行的非常基本的东西,但是从 Google 的 ARRAY_TO_STRING 文档中我看不到任何方法来向提取数组值。感谢任何有关解决此问题的最佳方法的想法。
据我了解,这是因为您只是查询一行数据,其中有一列为 ARRAY<STRING>
。当您使用 ARRAY_TO_STRINGS
时,它将只接受 ARRAY<STRING>
值,您会看到所有数组值只适合一个单元格。
因此,当您 运行 您的脚本时,您的输出将符合您的标准,并且 return 带有数组的列带有额外的行以供查看。
UI 上的可视化应该类似于您在问题中提到的内容:
Row | productId | productName | created | featureCount | orderName |
---|---|---|---|---|---|
1 | abc123 | someProductName | 2020-01-01 | 12 | someOrderName |
someOtherOrderName |
注意:在 bigquery 上,此附加行显示为灰色(
),它是第 1 行的一部分,但它显示为附加行以提高可见性。所以这个输出在 table.
JSON 上的可视化将是:
[
{
"productId": "abc123",
"productName": "someProductName",
"created": "2020-01-01",
"featureCount": "12",
"orderName": [
"someOrderName",
"someOtherOrderName"
]
}
]
我认为没有关于如何在 UI 上可视化数组的具体文档信息,但我可以分享讨论如何 flattening
您的行输出到单行行的文档, 检查:
我使用以下方法来复制您的问题:
CREATE OR REPLACE TABLE `project-id.dataset.working_table` (
productId STRING,
productName STRING,
created STRING,
featureCount STRING,
orderName ARRAY<STRING>
);
insert into `project-id.dataset.working_table` (productId,productName,created,featureCount,orderName)
values ('abc123','someProductName','2020-01-01','12',['someOrderName','someOtherOrderName']);
insert into `project-id.dataset.working_table` (productId,productName,created,featureCount,orderName)
values ('abc123X','someProductNameX','2020-01-02','15',['someOrderName','someOtherOrderName','someData']);
产出
Row | productId | productName | created | featureCount | orderName |
---|---|---|---|---|---|
1 | abc123 | someProductName | 2020-01-01 | 12 | someOrderName |
someOtherOrderName | |||||
2 | abc123X | someProductNameX | 2020-01-02 | 15 | someOrderName |
someOtherOrderName | |||||
someData |
注意:Table 包含 2 行。