[英]Query clustering and partitioning in BigQuery
我想创建一个包含事件的聚簇表,这将帮助我花更少的时间和处理读取它的行。 表的意义何在。 我正在从 GA4 获取事件数据,但我浪费了太多已处理的行来读取它。 基于这个问题,我想创建一个新的聚簇表来存储我需要的字段。 我有用户在应用程序中执行特定操作的日期和时间字段以及与之相关的其他字段。 基本上,我将需要此表中有关某些用户执行某个事件的日期和时间、用户通常执行的事件数量或某个日期等的数据。
我已经阅读了很多关于聚类和分区的文章,但我想我应该问问社区哪些字段更适合创建基于此的分区和聚类? 我在下面附上我自己的代码谢谢!)`
CREATE OR REPLACE TABLE
chasto-prod.analytics_324473216.EventAnalytics
PARTITION BY
date
CLUSTER BY
event_name AS
SELECT
CAST(FORMAT_DATE('%Y-%m-%d', PARSE_DATE('%Y%m%d', event_date)) AS Date) AS date,
CAST(FORMAT_TIME('%T', TIME(TIMESTAMP_MICROS(event_timestamp))) AS Time) AS time,
event_name,
device.category,
device.mobile_brand_name,
device.mobile_model_name,
device.operating_system,
geo.continent,
geo.country,
geo.city,
traffic_source.name,
traffic_source.medium,
traffic_source.source,
platform,
CASE
WHEN K.value.string_value IS NULL THEN CAST(K.value.int_value AS string)
ELSE
K.value.string_value
END
AS UserID
FROM
`chasto-prod.analytics_324473216.events_*`,
UNNEST(event_params) AS K
WHERE
K.key='user_id'
`
您的用例似乎侧重于日期和用户,因此按日期设计分区并按用户和事件类型进行聚类是有意义的。
请记住,集群意味着数据存储在同一地点,因此如果您按用户和事件进行过滤或分组,将会更快、更高效。
根据文档:
聚簇列的顺序会影响查询性能。 要从集群中获益,查询过滤器顺序必须与集群列顺序匹配,并且必须至少包括第一个集群列。
https://cloud.google.com/bigquery/docs/clustered-tables#cluster_column_ordering
还要记住,在编写查询时聚类顺序很重要。
要优化聚类结果,您必须从第一个聚类列开始按顺序从聚类列中筛选。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.