BigQuery:展平两个重复的列

时间:2016-12-13 12:09:07

标签: google-bigquery

我目前正在使用一个关于BigQuery的非常简单的表,每行有两个重复的列class_numbers [REPEATED INTEGER]class_descriptions [REPEATED STRING],这两个重复属性都相同长度和每个索引的对应关系,例如:对于给定的记录class_numbers[1]描述将在class_descriptions[1]上。

我需要做的是基本上在平面表中转换这两个重复的字段,保持两列之间的对应关系,我该如何实现呢?

使用标准SQL的SELECT class_numbers, class_descriptions FROM test.mytable返回相同的表(带有重复的字段)并在遗留SQL上执行相同的操作会引发错误“无法同时输出多个独立重复的字段。”。

如何达到预期效果?

谢谢,

2 个答案:

答案 0 :(得分:2)

使用标准SQL,您可以使用UNNEST(...) WITH OFFSET。例如,

SELECT
  class_number,
  class_descriptions[OFFSET(off)] AS class_description
FROM MyTable,
  UNNEST(class_numbers) AS class_number WITH OFFSET off;

答案 1 :(得分:1)

以下是BigQuery Legacy SQL的版本

SELECT 
  class_number, 
  class_description
FROM (
    SELECT 
      class_number, 
      number_pos, 
      class_descriptions AS class_description, 
      POSITION(class_descriptions) AS description_pos 
    FROM FLATTEN((
        SELECT 
          class_numbers AS class_number, 
          POSITION(class_numbers) AS number_pos, 
          class_descriptions 
        FROM YourTable
    ), class_numbers)
)
WHERE number_pos = description_pos