Google的bigquery是一個強大的云數(shù)據(jù)庫,支半結構化數(shù)據(jù),TB級單表的查詢,自動擴充什么的,反正就是很NB。除了必須要翻墻和貴之外。。。
在bigquery的webUI界面,可以編寫SQL并查詢,同時會實時的提示你本次查詢所需的數(shù)據(jù)量,因為是按照這個數(shù)據(jù)量的大小算錢的。
然后BigQuery的SQL語法和標準SQL差不多。具體查看: Bigquery官方SQL文檔
1 在WebUI中使用自定義變量
這個主要是在編寫sql中有些值反復出現(xiàn),比如日期范圍這種,一個SQL寫的很長的話可能會出現(xiàn)好幾次同一個時間變量。
然后需要改變這些變量的時候就會很麻煩,每個地方都要去改一下。
所以自定義變量還是很有必要的。
Bigquery中支持腳本式的SQL查詢,具體查看這篇文檔: 使用標準 SQL 編寫腳本(既然都用了Bigquery了,默認是會翻墻的)
所以就有第一種自定義變量的方法:
DECLARE a int64 DEFAULT 2;
WITH
Players AS (
SELECT 'gorbie' AS account, 29 AS level, 'red' AS guild UNION ALL
SELECT 'junelyn', 2, 'blue' UNION ALL
SELECT 'corba', 43, 'green')
SELECT
*
FROM
Players
WHERE
level>a
使用DECLARE聲明一個變量,類型及默認值,然后在后面SQL語句中就可以使用這個變量了。
但是這樣有一個問題,就是不能給你本次計算流量的預估值了。

如果你知道查詢的數(shù)據(jù)量不大的話,那倒無所謂。
但是有的表幾個T,查一次就是幾十刀出去了,沒有提示的話還是不方便的。
那么還有第二種方法,使用with子句:
WITH
Variable as (select 1 as a),
Players AS (
SELECT 'gorbie' AS account, 29 AS level, 'red' AS guild UNION ALL
SELECT 'junelyn', 2, 'blue' UNION ALL
SELECT 'corba', 43, 'green')
SELECT
*
FROM
Players, Variable
WHERE
level > a

把變量直接定義為一個子查詢的一個值,這樣在下面的語句中也可以直接引用這樣變量,
而且可以正確的算出本次消耗的流(我這沒查表所以是0B,真查了是對的哈)。
但是也有個麻煩的地方,就是要在每一個FROM后跟上這個子查詢的名稱,它才能獲取到這個子查詢里的變量
兩種方法都不是很完美,但是至少也比一個一個的改變量要好多了。