谷歌云最近宣布推出了BigQuery的全球查詢功能的預(yù)覽版。這一新功能使開發(fā)人員能夠在不先移動(dòng)或復(fù)制數(shù)據(jù)的情況下,對(duì)存儲(chǔ)在不同地理位置的數(shù)據(jù)執(zhí)行SQL查詢,從而直接匯總分析結(jié)果。
由于無需使用ETL流程,全球查詢功能會(huì)自動(dòng)從各個(gè)地區(qū)獲取數(shù)據(jù)并合并結(jié)果,這對(duì)于擁有分布式數(shù)據(jù)集的企業(yè)來說大大簡(jiǎn)化了數(shù)據(jù)分析工作,同時(shí)它們也可以自主控制查詢的執(zhí)行地點(diǎn)。谷歌的產(chǎn)品經(jīng)理Wawrzek Hyska和軟件工程師Oleh Khoma這樣寫道:
在后臺(tái),BigQuery會(huì)自動(dòng)處理執(zhí)行查詢所需的數(shù)據(jù)傳輸工作,因此用戶能夠進(jìn)行跨地區(qū)分析而無需進(jìn)行任何ETL操作,整個(gè)過程無縫銜接。BigQuery會(huì)識(shí)別出那些需要在不同地區(qū)執(zhí)行的查詢部分,并分別在這些地區(qū)運(yùn)行它們。當(dāng)主查詢被執(zhí)行時(shí),這些子查詢的結(jié)果會(huì)被傳輸?shù)街付ǖ奈恢茫ㄏ到y(tǒng)還會(huì)嘗試優(yōu)化傳輸數(shù)據(jù)量,以減少傳輸成本)。最后,所有結(jié)果會(huì)被合并起來,從而生成最終的查詢結(jié)果。
例如,使用標(biāo)準(zhǔn)的SQL查詢,開發(fā)人員可以將歐洲和亞洲的交易數(shù)據(jù)與美國(guó)的客戶數(shù)據(jù)結(jié)合起來進(jìn)行分析。雖然之前也可以通過ETL流程先將數(shù)據(jù)復(fù)制到中央服務(wù)器再執(zhí)行查詢來獲得類似的結(jié)果,但現(xiàn)在BigQuery可以直接在不同地區(qū)的數(shù)據(jù)上運(yùn)行查詢,這使得數(shù)據(jù)分析變得更加簡(jiǎn)單快捷。
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;
由于數(shù)據(jù)需要在不同地區(qū)之間傳輸,因此全球查詢的延遲通常會(huì)比單地區(qū)查詢更高。不過,這一新功能雖然會(huì)帶來額外的成本和挑戰(zhàn),而且某些法規(guī)也可能限制數(shù)據(jù)離開原始存儲(chǔ)地點(diǎn),但開發(fā)人員仍然可以通過明確指定查詢的執(zhí)行地點(diǎn)來選擇是否使用這一功能。這一功能讓數(shù)據(jù)工程師能夠根據(jù)自己的數(shù)據(jù)存儲(chǔ)要求和合規(guī)性需求,自主控制數(shù)據(jù)的處理地點(diǎn)。Hyska和Khoma進(jìn)一步補(bǔ)充道:
不同之處在于,現(xiàn)在BigQuery可以在相距數(shù)千英里的不同數(shù)據(jù)集上執(zhí)行查詢操作。這不僅大大簡(jiǎn)化了數(shù)據(jù)處理的架構(gòu),也顯著加快了數(shù)據(jù)分析的速度。
Google Cloud并不是唯一一家提供通過單個(gè)SQL語(yǔ)句查詢分布式數(shù)據(jù)的服務(wù)的提供商。例如,AWS為Amazon Redshift提供了跨區(qū)域數(shù)據(jù)共享功能,而Athena也能在不同區(qū)域之間查詢數(shù)據(jù),但它并不會(huì)像BigQuery那樣自動(dòng)協(xié)調(diào)跨區(qū)域的分布式執(zhí)行過程。
要啟用全局查詢功能,數(shù)據(jù)工程師需要對(duì)項(xiàng)目或組織配置進(jìn)行相應(yīng)調(diào)整:在執(zhí)行查詢的區(qū)域?qū)?code>enable_global_queries_execution設(shè)置為true,在存儲(chǔ)數(shù)據(jù)的區(qū)域?qū)?code>enable_globalqueries_data_access設(shè)置為true。這樣,查詢可以在一個(gè)項(xiàng)目中執(zhí)行,同時(shí)從另一個(gè)項(xiàng)目中的不同區(qū)域獲取數(shù)據(jù),而且無需使用任何緩存機(jī)制來避免跨區(qū)域傳輸數(shù)據(jù)。
全局查詢的成本包括:遠(yuǎn)程區(qū)域內(nèi)各個(gè)子查詢的計(jì)算成本(按照當(dāng)?shù)囟▋r(jià)標(biāo)準(zhǔn)計(jì)算)、在查詢執(zhí)行所在區(qū)域的最終查詢費(fèi)用、根據(jù)數(shù)據(jù)復(fù)制規(guī)則在跨區(qū)域傳輸數(shù)據(jù)時(shí)產(chǎn)生的費(fèi)用,以及將復(fù)制后的數(shù)據(jù)存儲(chǔ)在主區(qū)域8小時(shí)所產(chǎn)生的費(fèi)用。
這一新功能目前仍處于測(cè)試階段。
