Google的bigquery是一个强大的云数据库,支半结构化数据,TB级单表的查询,自动扩充什么的,反正就是很NB。除了必须要翻墙和贵之外。。。
在bigquery的webUI界面,可以编写SQL并查询,同时会实时的提示你本次查询所需的数据量,因为是按照这个数据量的大小算钱的。
然后BigQuery的SQL语法和标准SQL差不多。具体查看: Bigquery官方SQL文档
1 在WebUI中使用自定义变量
这个主要是在编写sql中有些值反复出现,比如日期范围这种,一个SQL写的很长的话可能会出现好几次同一个时间变量。
然后需要改变这些变量的时候就会很麻烦,每个地方都要去改一下。
所以自定义变量还是很有必要的。
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语句中就可以使用这个变量了。
但是这样有一个问题,就是不能给你本次计算流量的预估值了。
如果你知道查询的数据量不大的话,那倒无所谓。
但是有的表几个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后跟上这个子查询的名称,它才能获取到这个子查询里的变量
两种方法都不是很完美,但是至少也比一个一个的改变量要好多了。
网友评论