自动创建用于流式插入的 BQ 表

Jum*_*fer 3 python google-bigquery

也许我弄错了:有没有办法自动为 tabledata.insertAll 命令创建目标表?如果是,请指出我正确的方向。

如果不是 - 创建所需表的最佳方法是什么?在启动时检查现有表并通过从 GCS 加载来创建不存在的表?或者可以直接从代码创建它们而不需要加载作业吗?

我定义了许多事件类(Python Cloud 端点),完美的解决方案是使用这些定义来创建匹配的 BQ 表。

Jor*_*ani 5

由于 BigQuery 不知道架构,因此无法在流式传输期间自动创建表。您发布的 JSON 数据没有类型信息 - 如果有字段“123”,我们不知道它是否始终是字符串,或者实际上是否应该是整数。此外,如果您发布的数据缺少可选字段,则创建的架构将比您想要的更窄。

创建表的最佳方法是使用tables.insert() 调用(无需运行加载作业来从GCS 加载数据)。您可以准确提供所需的架构,创建表后,您可以将数据流式传输到其中。

在某些情况下,客户会预先创建一个月的表,因此他们只需每 30 天担心一次。在其他情况下,您可能需要在启动时检查该表是否存在,如果不存在,则创建它。

  • 这也有效。如果您不想插入空白行,可以执行以下操作:`SELECT * from (SELECT 0 as foo, "" as bar) WHERE false`,这将创建一个空结果,但带有模式。 (2认同)