在BigQuery中,我有一个查询,其结果如下:
myQueryValue
select * from 'some path'
我想在新的查询中直接使用它。
SELECT someValue
FROM
(
select * from 'some path' <- How can I replace this to myQueryValue?
)
我如何使用一些查询的结果值,如EVAL?
---------------- 编辑在10月14日 .----------------
谢谢你的回答,但我需要解释更多我想要的。
如果我有一个'queryTable'像
你可以使用子查询,它是在from子句中的查询。
下面是一个示例代码:SELECT * FROM (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)
子查询、内部查询或嵌套查询是在另一个查询内的查询SQL查询,并嵌入到WHERE子句中。
子查询用于返回将在主查询中使用的数据作为进一步限制要检索的数据的条件。子查询可以与SELECT、INSERT、UPDATE和DELETE一起使用语句以及诸如=、<、>、>=、<=、IN、BETWEEN、等。
子查询必须遵循以下规则−
子查询必须用圆括号括起来。
一个子查询在SELECT子句中只能有一列,除非多比;列位于主查询中,供子查询进行比较它选择了>在列。
ORDER BY命令不能在子查询中使用查询>可以使用ORDER BY。GROUP BY命令可用于在子查询中执行与ORDER BY相同的>函数
返回多于一行的子查询只能用于多个>值操作符,如IN操作符。
SELECT列表不能包含任何对求值的引用到BLOB, ARRAY, CLOB或NCLOB
子查询不能立即包含在set函数中。
BETWEEN操作符不能用于子查询。然而,BETWEEN>操作符可在子查询中使用。
点击这里获取更多关于子查询的信息。
下面是实现这个目标的简单示例
DECLARE myQueryValue STRING;
SET myQueryValue = "select * from your_table";
EXECUTE IMMEDIATE '''
SELECT someValue
FROM ( ''' || myQueryValue || ''' )''';
由于你没有提供额外的信息,我将详细说明我的意见。
在评论中,我建议你可以使用Declare和Set。这两者之间的区别在这个stackoverflow线程中得到了体现。
DECLARE
不初始化变量。当你声明它时,你声明了变量名、类型和一个默认值,默认值可以是一个表达式。
SET
用于初始化您先前声明的变量,并且在您声明它之前您不能设置该变量。
一个例子已经在@Mikhail Berlyant
回答在这个线程提供。
但是,在GCP Set Reference中有更详细的信息和更多的例子。
将一个变量设置为给定表达式的值,或者根据多个表达式的结果同时设置多个变量。
SET
语句可以出现在脚本体中的任何地方。
这是最简单的方法。
另一种常见的方法是使用SubQuery/Nested Query
,它在GCP BigQuery Reference中也有很好的描述。
在GCP文档中,您还可以找到使用Set
,Declare
和subquery
的示例:
DECLARE target_word STRING DEFAULT 'methinks';
DECLARE corpus_count, word_count INT64;
SET (corpus_count, word_count) = (
SELECT AS STRUCT COUNT(DISTINCT corpus), SUM(word_count)
FROM `bigquery-public-data`.samples.shakespeare
WHERE LOWER(word) = target_word
);
SELECT
FORMAT('Found %d occurrences of "%s" across %d Shakespeare works',
word_count, target_word, corpus_count) AS result;
输出:
Found 151 occurrences of "methinks" across 38 Shakespeare works