如何在 BigQuery 中反转结构?
How to Unpivot a Struct in BigQuery?
我有一个 table,它有一个 ID,然后是一个结构。我想将结构的每个元素变成一个新行,结构字段名称是列 Period
中的值,值是结构值。请参阅下面的 table
生成 table 的查询:
当前数据
我试过这个:
SELECT * FROM `business-analytics-workbench.RAW.User_Activity` as UA
UNPIVOT(Activity FOR PERIOD in (Last_7_Days,Last_14_Days,Last_30_Days,Last_90_Days,First_Date_AEST,Last_Date_AEST))
但我收到此错误“无法识别的名称:Last_7_Days 在 [3:33]”
由于这些是结构的一部分,请尝试使用完整的结构字段名称
SELECT
*
FROM
`business-analytics-workbench.RAW.User_Activity` as UA
UNPIVOT(
Activity
FOR PERIOD in (
User_Activity.Last_7_Days,
User_Activity.Last_14_Days,
User_Activity.Last_30_Days,
User_Activity.Last_90_Days
)
)
让我知道这是否适合你。
您不能对具有不同数据类型的列进行逆透视(在您的示例中,它们是 INT64 和 DATE)。所以考虑下面的方法
SELECT * FROM (
SELECT Document_ID, User_Activity.*
FROM `business-analytics-workbench.RAW.User_Activity` as UA
)
UNPIVOT(Activity FOR PERIOD in (Last_7_Days,Last_14_Days,Last_30_Days,Last_90_Days))
如果应用于 y 中的样本数据,我们的问题输出是
如果您愿意在不使用 PIVOT 运算符的情况下转换 table - 在这种情况下您的限制较少 - 请考虑以下示例
select Document_ID, split(kv, ':')[offset(0)] PERIOD, split(kv, ':')[offset(1)] Activit
from (
select Document_ID, User_Activity.*
from `business-analytics-workbench.RAW.User_Activity`
) t,
unnest(split(translate(to_json_string(t), '{}"', ''))) kv
where split(kv, ':')[offset(0)] != 'Document_ID'
如果应用于您问题中的示例数据 - 输出为
我有一个 table,它有一个 ID,然后是一个结构。我想将结构的每个元素变成一个新行,结构字段名称是列 Period
中的值,值是结构值。请参阅下面的 table
生成 table 的查询:
当前数据
我试过这个:
SELECT * FROM `business-analytics-workbench.RAW.User_Activity` as UA
UNPIVOT(Activity FOR PERIOD in (Last_7_Days,Last_14_Days,Last_30_Days,Last_90_Days,First_Date_AEST,Last_Date_AEST))
但我收到此错误“无法识别的名称:Last_7_Days 在 [3:33]”
由于这些是结构的一部分,请尝试使用完整的结构字段名称
SELECT
*
FROM
`business-analytics-workbench.RAW.User_Activity` as UA
UNPIVOT(
Activity
FOR PERIOD in (
User_Activity.Last_7_Days,
User_Activity.Last_14_Days,
User_Activity.Last_30_Days,
User_Activity.Last_90_Days
)
)
让我知道这是否适合你。
您不能对具有不同数据类型的列进行逆透视(在您的示例中,它们是 INT64 和 DATE)。所以考虑下面的方法
SELECT * FROM (
SELECT Document_ID, User_Activity.*
FROM `business-analytics-workbench.RAW.User_Activity` as UA
)
UNPIVOT(Activity FOR PERIOD in (Last_7_Days,Last_14_Days,Last_30_Days,Last_90_Days))
如果应用于 y 中的样本数据,我们的问题输出是
如果您愿意在不使用 PIVOT 运算符的情况下转换 table - 在这种情况下您的限制较少 - 请考虑以下示例
select Document_ID, split(kv, ':')[offset(0)] PERIOD, split(kv, ':')[offset(1)] Activit
from (
select Document_ID, User_Activity.*
from `business-analytics-workbench.RAW.User_Activity`
) t,
unnest(split(translate(to_json_string(t), '{}"', ''))) kv
where split(kv, ':')[offset(0)] != 'Document_ID'
如果应用于您问题中的示例数据 - 输出为