在 BigQuery 中将数据插入/创建分片/通配符表
Posted
技术标签:
【中文标题】在 BigQuery 中将数据插入/创建分片/通配符表【英文标题】:Insert data into / creating a sharded/wildcard table in BigQuery 【发布时间】:2020-04-09 09:02:28 【问题描述】:在 gcp 上有很多关于 querying 分片/通配符表 [1][2] 的文档,但我似乎无法弄清楚如何创建或将数据插入到诸如表中.
这是一个微不足道且几乎毫无意义的例子:
-- STANDARD SQL
CREATE TABLE IF NOT EXISTS `mydataset.mytable_CA` AS
SELECT "CA" as COUNTRY_CODE
CREATE TABLE IF NOT EXISTS `mydataset.mytable_US` AS
SELECT "US" as COUNTRY_CODE
SELECT * FROM `mydataset.mytable_*` WHERE _TABLE_SUFFIX = "CA"
CREATE 语句中的通配符
如何在 create 语句中使用通配符?
-- STANDARD SQL
-- DOES NOT WORK
CREATE TABLE IF NOT EXISTS `mydataset.mytable_*` AS
SELECT "US" as COUNTRY_CODE WHERE _TABLE_SUFFIX = "US"
INSERT 语句中的通配符
同样,我如何进行插入?
是否可以按照以下方式做一些事情:
-- STANDARD SQL
-- DOES NOT WORK
INSERT INTO `mydataset.mytable_*` WHERE _TABLE_SUFFIX = COUNTRY_CODE
SELECT * FROM UNNEST(["US", "US", "CA"]) as COUNTRY_CODE
我知道建议使用分区和集群,但我特别询问通配符,所以请放纵我:)
这可能使用标准 SQL 吗?如果没有,那么旧版 SQL 怎么样?
[1]https://cloud.google.com/bigquery/docs/reference/standard-sql/wildcard-table-reference [2]https://cloud.google.com/bigquery/docs/querying-wildcard-tables【问题讨论】:
据我所知,您不能在创建和插入语句中使用通配符。如果您想这样做,您可以使用 Python 等外部编程语言来动态创建查询并运行它。 【参考方案1】:如您所见here,DML
在BigQuery
中有一些限制,其中之一是:
包含数据操作语言 (DML) 语句的查询 不能使用通配符表作为查询的目标。例如,一个 通配符表可以用在 UPDATE 查询的 FROM 子句中,但是 不能将通配符表用作 UPDATE 操作的目标。
换句话说,您不能使用通配符来指定要创建、更新或插入新记录的表。尽管如此,您仍可以使用它来指定日期的来源。
让我们看一些如何在 DML 和 DDL 中使用通配符的示例。
插入
如果要将数据插入通配符表,则需要将数据插入最终表。也就是说,需要指定包含后缀的完整路径。
INSERT INTO `mydataset.mytable_US` <your query or your values>
如果您使用通配符表作为在普通表中插入数据的数据源,则可以在WHERE
子句中使用通配符:
INSERT INTO `mydataset.mynormaltable`
SELECT <fields>
FROM `mydataset.mytable_*`
WHERE _TABLE_SUFFIX = "US"
创作
同样,您不能在目标中使用通配符,但可以使用它来指定数据源:
CREATE TABLE IF NOT EXISTS `mydataset.normal_table`
AS SELECT <fields>
FROM `mydataset.mytable_*`
WHERE _TABLE_SUFFIX = "US"
如果你想创建一个新的具有相同前缀的通配符表,你可以这样做:
CREATE TABLE IF NOT EXISTS `mydataset.mytable_GB`
AS SELECT <fields>
FROM `mydataset.table`
在本例中,您创建了一个名为 GB 的新后缀。在此之后,您将能够正常查询带有 GB 后缀的表。
最后,我想在此附上对DML 和DDL 的引用,用于BigQuery
。
希望对你有帮助
【讨论】:
以上是关于在 BigQuery 中将数据插入/创建分片/通配符表的主要内容,如果未能解决你的问题,请参考以下文章
使用云功能从云存储中将数据加载到BigQuery中(替代功能?)