将多行查询粘贴到 BigQuery SQL shell

Posted

技术标签:

【中文标题】将多行查询粘贴到 BigQuery SQL shell【英文标题】:Pasting multi-line queries into BigQuery SQL shell 【发布时间】:2019-06-04 18:05:40 【问题描述】:

我正在运行 BigQuery 命令行 shell,但我无法成功运行多行查询(也就是带换行符的查询),因为每当我将查询粘贴到 shell 中时,每一行都会单独运行,而不是全部运行在一起。

例如,

select * from table

工作正常,因为它在一行中,但如果我尝试运行

select
*
from
table

它不起作用,因为每一行都是单独运行的。

有什么方法可以让它工作吗?

【问题讨论】:

您使用 bq shell 有什么原因吗?您可以在 UI 中或使用bq query "select ......" 执行多行查询。 @ECris 如果通过服务帐户启用对表的访问,则无法从 UI 访问。 bq query "select ......" 也不适用于包含单引号的查询。 我也有同样的问题。有这方面的更新吗? 【参考方案1】:

query 命令创建一个运行提供的 SQL 查询的查询作业。在文档Using the bq command-line tool 中,您可以找到一些示例,例如:

bq query --nouse_legacy_sql \
'SELECT
   COUNT(*)
 FROM
   `bigquery-public-data`.samples.shakespeare'

【讨论】:

这是来自命令行,而不是在 bq shell 中。我还没有找到在 bq shell 中进行多行查询的方法。【参考方案2】:

老实说,我也找不到合适的帮助,所以我使用 CONCAT 函数创建了一些解决方法。请注意,我在 FROM 子句之前有一个空格。希望他的帮助。

DECLARE table_name STRING DEFAULT '20220214'; DECLARE 查询字符串;

SET query = CONCAT("""select user_pseudo_id, user_id""",
""" FROM `app.analytics.events_""" || table_name || """` where user_id IS NOT NULL group by user_pseudo_id, user_id""");

EXECUTE IMMEDIATE query;

【讨论】:

以上是关于将多行查询粘贴到 BigQuery SQL shell的主要内容,如果未能解决你的问题,请参考以下文章

bigquery 命令行在单个 sql 文件中执行多个查询

将单行转换为多行 Bigquery SQL

BigQuery SQL,将 SQL 查询结果附加到现有表

如何在 BigQuery SQL 中将字符串列拆分为多行单个单词和单词对?

Google BigQuery 从 Python 脚本执行 SQL 文件

如何将 BigQuery SQL 查询结果转换为 Spark DataFrame?