Google BigQuery API,如何设置destinationTable的字段类型?

时间:2015-01-21 06:33:02

标签: python api google-bigquery

我们使用BigQuery的Python API,特别是jobs资源,在现有BigQuery表上运行查询,并通过将结果数据集插入新的BigQuery表(destinationTable)来导出结果。

有没有办法同时更新新创建的表的架构并设置特定的数据类型?默认情况下,所有字段都设置为“字符串”类型,但我们需要其中一个字段为“timestamp”。

2 个答案:

答案 0 :(得分:2)

为了将目标表的字段类型设置为需要CAST到查询中的新类型,因为结果集描述了目标表中的新字段类型。

  1. 您需要使用简单的CAST函数来设置数字/日期。
  2.   

    SELECT TIMESTAMP(t)AS t FROM(选择“2015-01-01 00:00:00”t)

    1. 最近为记录类型引入了“unflatten”功能,因此您现在可以将整个记录传输到另一个表,同时保留RECORD结构 - 为此您需要设置目标表(以及所需的写入处置) ),设置allowLargeResults = TRUE,然后设置Flatten Results = FALSE(参见here中的最后一篇文章)。然后,您可以运行这样的查询将整个记录传输到dest表:
    2.   

      SELECT cell。* FROM publicdata:samples.trigrams LIMIT 0;

      我正在使用来自publicdata:samples数据集的表格,您也可以使用这些表格,因此您也可以运行这些测试。在上面的查询中,'cell'是一个记录,如果你设置Flatten Results = FALSE,你会看到'cell'仍然是dest表中的RECORD。

      1. 将数据传输到dest表时,可以从记录中删除一些字段。以下是演示此内容的查询(同样,您需要使用Flatten Results = FALSE运行它):
      2.   

        SELECT cell.value,cell.volume_count FROM publicdata:samples.trigrams   LIMIT 0;

        运行上述查询后,“单元格”记录将只包含您指定的字段。

        1. 您可以在将数据传输到dest表时重命名记录中的现有字段:
        2.   

          SELECT cell.value AS cell.newvalue FROM publicdata:samples.trigrams   LIMIT 0;

          1. 不幸的是,目前无法在记录中添加字段,例如,以下查询将在“actor_attributes”和“repository”记录之外创建“url”。
          2.   

            选择
              actor_attributes.blog,
              repository.created_at,
              repository.url AS actor_attributes.url
              FROM publicdata:samples.github_nested
              限制0;

            因此,为了向记录添加字段,您需要导出数据,在BigQuery之外处理它,然后使用新架构加载它。

答案 1 :(得分:0)

将自动设置目标表的字段类型。如果需要将字符串转换为整数或时间戳,请在查询中执行此操作。

这将创建一个包含一列(字符串)的目标表:

SELECT x FROM (SELECT "1" x)

这将创建一个包含一列(整数)的目标表:

SELECT INTEGER(x) AS x FROM (SELECT "1" x)

这将创建一个包含一列(时间戳)的目标表:

SELECT TIMESTAMP(x) AS x FROM (SELECT "2015-10-21 04:29:00" x)