Sql 如何在BigQuery中取消Pivot?
不确定调用什么函数,但转置是我能想到的最接近的事情 我在BigQuery中有一个表,配置如下: 但我想查询如下配置的表: 创建此表的SQL代码是什么样子的 谢谢 2020年更新:fhoff.x.unpivot 见: 我创建了一个公共持久UDF。如果您有一个表a,您可以将整行交给UDF,以使其不被分割:Sql 如何在BigQuery中取消Pivot?,sql,google-bigquery,transpose,unpivot,Sql,Google Bigquery,Transpose,Unpivot,不确定调用什么函数,但转置是我能想到的最接近的事情 我在BigQuery中有一个表,配置如下: 但我想查询如下配置的表: 创建此表的SQL代码是什么样子的 谢谢 2020年更新:fhoff.x.unpivot 见: 我创建了一个公共持久UDF。如果您有一个表a,您可以将整行交给UDF,以使其不被分割: SELECT geo_type, region, transportation_type, unpivotted FROM `fh-bigquery.public_dump.applemobil
SELECT geo_type, region, transportation_type, unpivotted
FROM `fh-bigquery.public_dump.applemobilitytrends_20200414` a
, UNNEST(fhoffa.x.unpivot(a, '_2020')) unpivotted
它可以像这样变换表:
进入这个
正如评论所提到的,我上面的解决方案并不能解决这个问题
这里有一个变体,我来看看如何将所有内容整合为一个:
创建临时函数unpivotx任意类型,如下所示
选择
数组集合结构
REGEXP_提取“[^]+”作为键
,REGEXP_EXTRACTy,':[0-9]+'作为值
从最不安
选择REGEXP_EXTRACT_ALLjson,“[smlx][meaxl]”| | r'[^::+:\?[^]+?'arr
从选择到_JSON_STRINGx JSON y
;
选择位置,取消定位*
来自“robotic-charmer-726.bl_测试数据.重新配置_a_表”`x
,unnestupivotx unpivotted
先前的答复:
在BigQuery中使用带“,”的表的并集,加上一些列别名:
SELECT Location, Size, Quantity
FROM (
SELECT Location, 'Small' as Size, Small as Quantity FROM [table]
), (
SELECT Location, 'Medium' as Size, Medium as Quantity FROM [table]
), (
SELECT Location, 'Large' as Size, Large as Quantity FROM [table]
)
@Felipe,我尝试使用标准sql,但在查询的第一行出现了一个错误,它说:列名位置在[1:8]处不明确 我使用了一个对我有效的替代查询:
SELECT Location, 'Small' as Size, Small as Quantity FROM `table`
UNION ALL
SELECT Location, 'Medium' as Size, Medium as Quantity FROM `table`
UNION ALL
SELECT Location, 'Large' as Size, Large as Quantity FROM `table`
我有一个使用结构、数组和交叉连接+UNNEST的解决方案: 完整解释和说明:更新2021: BigQuery中引入了一个新的运算符 在使用UNPIVOT将第一季度、第二季度、第三季度和第四季度旋转为销售和季度列之前: 产品 Q1 问题2 第三季度 第四季度 甘蓝 51 23 45 3. 苹果 77 0 25 2.
感谢您对@FelipeHoffa!的快速而有益的回复!!它不需要第二个和第三个“FROM”。所以最后它是这样工作的:'选择位置,大小,从选择位置的数量,'小'作为大小,从[表]的数量小,'中'作为大小,从[表]的数量中等,'选择位置,'大'作为大小,从[表]的数量大'谢谢!正当查询修复如果你上传样本数据到BQ,那么我可以测试我的查询,然后再粘贴到这里好知道!如何指向我的BigQuery数据集?我目前只使用Tableau和BigQueryWebUI进行查询,所以我不知道如何向某人指示我的数据集。谢谢如果您将数据集公开,那么StackOverflow上的任何人都可以查看它并伸出援手:。例如,这是我8月份的wikipedia页面浏览日志:project:dataset.table感谢您的2020更新祝贺。只是警告一下,只要列本身没有嵌套在结构中,这种方法就行。在这里,关键值开始执行有线操作。尽管如此,它的实施还是一个巨大的灵感来源。再次感谢。为什么投票被否决了?我可以这样解决我的问题。
WITH
My_Table_Metrics_Data AS (
SELECT
...,
[
STRUCT('...' AS Metric, ... AS Data),
STRUCT('...' AS Metric, ... AS Data),
] AS Metrics_Data
FROM
`My_Dataset.My_Table`
WHERE
...
)
SELECT
...,
Metric_Data
FROM
My_Table_Metrics_Data
CROSS JOIN
UNNEST(My_Table_Metrics_Data.Metrics_Data) AS Metric_Data