Bigquery unnest 最小行数

Posted

技术标签:

【中文标题】Bigquery unnest 最小行数【英文标题】:Bigquery unnest minimum number of rows 【发布时间】:2020-06-15 18:45:43 【问题描述】:

我正在尝试编写一个 unnest 查询以及限制。当我使用 unnest 时,它会为我提供其他列的重复条目,这是预期的,但是有没有一种方法可以指定我希望特定列的至少 10 条唯一记录?

这是我的示例数据和查询

food.id                     STRING  NULLABLE    
food.basket.id              STRING  NULLABLE
food.foodType               STRING  NULLABLE
food.price                  INTEGER NULLABLE    
food.printed                BOOLEAN NULLABLE    
food.variations             RECORD  REPEATED    
food.variations.id          INTEGER REPEATED    
food.variations.amount      INTEGER NULLABLE

样本数据

id     basket.id.    foodType.    price.    printed.    variations.id      variations.amount
1.      abbcd.         JUNK.       100.       TRUE.        1234.            10
                                                           2345.            20
2.      cdefg.         PIZZA.      200.       TRUE.        1234.            10
                                                           2345.            20
                                                           5678.            20
                                                           7816.            40
3.      pqrst.         JUNK.       200.       FALSE.       1234.            10
                                                           2345.            20
                                                           5678.            20
                                                           7816.            40
4.      uiwka.         TOAST.      500.       FALSE.       1234.            10
                                                           9898.            20
                                                           5678.            20
                                                           7816.            40

这是我的示例查询:

select basket.id as bId, foodType, price, printed, v.id as vId, v.amount as vAmount from my_table_name left join UNNEST (variations) as v limit 10;

这是结果:

id       bId.        foodType.    price.    printed.       vId.           vAmount
1.      abbcd.         JUNK.       100.       TRUE.        1234.            10
2.      abbcd.         JUNK.       100.       TRUE.        2345.            20
3.      cdefg.         PIZZA.      200.       TRUE.        1234.            10
4.      cdefg.         PIZZA.      200.       TRUE.        2345.            20
5.      cdefg.         PIZZA.      200.       TRUE.        5678.            20
6.      cdefg.         PIZZA.      200.       TRUE.        7816.            40
7.      pqrst.         JUNK.       200.       FALSE.       1234.            10
8.      pqrst.         JUNK.       200.       FALSE.       2345.            20
9.      pqrst.         JUNK.       200.       FALSE.       5678.            20
10.     pqrst.         JUNK.       200.       FALSE.       7816.            40

所以现在我与 bId uiwka 的行不见了。 因此,我正在尝试编写一个查询,该查询将限制我返回的唯一 bId 的数量。

【问题讨论】:

【参考方案1】:

您只需将LIMIT 向上移动一点 - 如下例所示

#standardSQL
SELECT 
  basket.id AS bId, 
  foodType, price, 
  printed, 
  v.id AS vId, 
  v.amount AS vAmount 
FROM (SELECT * FROM `project.dataset.table` LIMIT 10)
LEFT JOIN UNNEST (variations) AS v 

【讨论】:

非常感谢您的回答。 :)

以上是关于Bigquery unnest 最小行数的主要内容,如果未能解决你的问题,请参考以下文章

sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu

UNNEST(hit.eCommerceAction),谷歌 Bigquery

在 BIGQUERY 上使用 UNNEST 左连接

Google Bigquery 外部加入 UNNEST

一次选择中的 Bigquery 多个 unnest

BigQuery - 为啥在 Google Analytics 中提取交易数据不需要 UNNEST 运算符?