我有一个id和名称
的表id | name
----------
1 | apple
1 | banana
2 | carrot
3 | lemon
3 | orange
在Legacy Sql中,可以编写类似
的语句SELECT
id,
LAST(name) AS last_record_of_name,
FROM
[project:table]
GROUP BY 1
,结果将是
id | last_record_of_name
----------
1 | banana
2 | carrot
3 | orange
这利用了函数LAST https://cloud.google.com/bigquery/docs/reference/legacy-sql#last
如果在BigQuery中使用标准sql,是否有类似的功能?
答案 0 :(得分:6)
来自旧版SQL的import keras.utils.multi_gpu_model
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-7-0174878249b1> in <module>()
----> 1 import keras.utils.multi_gpu_model
2
ModuleNotFoundError: No module named 'keras.utils.multi_gpu_model'
的问题是,您提供的示例的输出未定义;它没有指定在这种情况下如何确定“最后”,因为输入表扫描不能保证具有任何特定顺序。如上所述,您可以使用来自BigQuery中标准SQL的LAST
来表达相同的查询,例如:
ANY_VALUE
我认为这不是你所追求的;如果目标是根据某些条件获取“最后”值,例如WITH SampleInput AS (
SELECT 1 AS id, 'apple' AS name UNION ALL
SELECT 1, 'banana' UNION ALL
SELECT 2, 'carrot' UNION ALL
SELECT 3, 'lemon' UNION ALL
SELECT 3, 'orange'
)
SELECT
id,
ANY_VALUE(name) AS last_record_of_name
FROM SampleInput
GROUP BY id;
+----+---------------------+
| id | last_record_of_name |
+----+---------------------+
| 1 | apple |
| 2 | carrot |
| 3 | lemon |
+----+---------------------+
值的排序顺序,那么您可以将name
与ARRAY_AGG
和{{1}一起使用},例如:
ORDER BY
查询的行为是明确定义的,它根据您的示例输入和输出提供所需的结果。
答案 1 :(得分:0)
使用Python BigQuery的Array_Agg()工作解决方案:
将熊猫作为pd导入
从google.cloud导入bigquery
strvalue =“”“ SELECT个用户
ARRAY_AGG(STRUCT(session,page))as hasComp
在<datasetname>.<tableName>
的位置
按用户分组按用户顺序
限制100个“”“
bigquery_client = bigquery.Client(project =“”)
数据集= bigquery_client.dataset(“”)
table = dataset.table('')
table.view_query_legacy_sql = False
query_job = bigquery_client.query(str_value)
df = query_job.to_dataframe()
print(df)