谷歌云最近宣布推出了BigQuery的全球查询功能的预览版。这一新功能使开发人员能够在不先移动或复制数据的情况下,对存储在不同地理位置的数据执行SQL查询,从而直接汇总分析结果。

由于无需使用ETL流程,全球查询功能会自动从各个地区获取数据并合并结果,这对于拥有分布式数据集的企业来说大大简化了数据分析工作,同时它们也可以自主控制查询的执行地点。谷歌的产品经理Wawrzek Hyska和软件工程师Oleh Khoma这样写道:

在后台,BigQuery会自动处理执行查询所需的数据传输工作,因此用户能够进行跨地区分析而无需进行任何ETL操作,整个过程无缝衔接。BigQuery会识别出那些需要在不同地区执行的查询部分,并分别在这些地区运行它们。当主查询被执行时,这些子查询的结果会被传输到指定的位置(系统还会尝试优化传输数据量,以减少传输成本)。最后,所有结果会被合并起来,从而生成最终的查询结果。

例如,使用标准的SQL查询,开发人员可以将欧洲和亚洲的交易数据与美国的客户数据结合起来进行分析。虽然之前也可以通过ETL流程先将数据复制到中央服务器再执行查询来获得类似的结果,但现在BigQuery可以直接在不同地区的数据上运行查询,这使得数据分析变得更加简单快捷。

SET @@location = 'US';

WITH transactions AS (
  SELECT customer_id, transaction_amount FROM `eu_transactions_sales_2024`
  UNION ALL
  SELECT customer_id, transaction_amount FROM `asia_transactions.sales_2024`
)

SELECT
  c.customer_name,
  SUM(t.transaction_amount) AS total_sales
FROM
  hq_customers.customer_list AS c
  LEFT JOIN transactions AS t
  ON c.id = t.customer_id
GROUP BY
  c.customer_name
ORDER BY
  total_sales DESC;

由于数据需要在不同地区之间传输,因此全球查询的延迟通常会比单地区查询更高。不过,这一新功能虽然会带来额外的成本和挑战,而且某些法规也可能限制数据离开原始存储地点,但开发人员仍然可以通过明确指定查询的执行地点来选择是否使用这一功能。这一功能让数据工程师能够根据自己的数据存储要求和合规性需求,自主控制数据的处理地点。Hyska和Khoma进一步补充道:

不同之处在于,现在BigQuery可以在相距数千英里的不同数据集上执行查询操作。这不仅大大简化了数据处理的架构,也显著加快了数据分析的速度。

Google Cloud并不是唯一一家提供通过单个SQL语句查询分布式数据的服务的提供商。例如,AWS为Amazon Redshift提供了跨区域数据共享功能,而Athena也能在不同区域之间查询数据,但它并不会像BigQuery那样自动协调跨区域的分布式执行过程。

要启用全局查询功能,数据工程师需要对项目或组织配置进行相应调整:在执行查询的区域将enable_global_queries_execution设置为true,在存储数据的区域将enable_globalqueries_data_access设置为true。这样,查询可以在一个项目中执行,同时从另一个项目中的不同区域获取数据,而且无需使用任何缓存机制来避免跨区域传输数据。

全局查询的成本包括:远程区域内各个子查询的计算成本(按照当地定价标准计算)、在查询执行所在区域的最终查询费用、根据数据复制规则在跨区域传输数据时产生的费用,以及将复制后的数据存储在主区域8小时所产生的费用。

这一新功能目前仍处于测试阶段。

Comments are closed.