【问题标题】:BigQuery exports NUMERIC data type as binary data type in AVROBigQuery 将 NUMERIC 数据类型导出为 AVRO 中的二进制数据类型
【发布时间】:2019-06-18 14:43:34
【问题描述】:

我正在从 BigQuery 表中导出数据,该表将名为 prop12 的列定义为 NUMERIC 数据类型。请注意,目标格式为 AVRO,无法更改。

bq extract --destination_format AVRO  datasetName.myTableName /path/to/file-1-*.avro

当我读取 avro 数据时,使用 spark 无法将此 NUMERIC 数据类型转换为整数。

--prop12: binary (nullable = true)
cannot resolve 'CAST(`prop12` AS INT)' due to data type mismatch: cannot cast BinaryType to IntegerType

在进行 bq 提取时,我有什么方法可以指定 prop12 应导出为整数?

如果在 bq 导出期间不可能,我是否只能选择在 spark 中读取二进制数据?

【问题讨论】:

  • 您是否考虑过将数字转换为 int64(如果允许;值不超过 int 范围并且没有任何小数位)并将其保存在另一个表中,然后使用该表导出到 AVRO ?
  • @Christopher,使用 int64 将其保存在另一个表中,浮点数对我来说不是选项,因为我们还有其他具有小数的属性。我简化了仅指整数的问题。

标签: apache-spark google-bigquery avro


【解决方案1】:

有什么方法可以指定 prop12 应该导出为整数 在做bq提取的时候?

在提取命令中你不能这样做。您可以创建一个新的临时表,然后将其提取:

bq query --nouse_legacy_sql '

    CREATE TABLE `my_dataset.my_temp_table`
    OPTIONS(
          expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 10 MINUTE)
    ) AS
    SELECT * REPLACE (CAST(prop12 AS INT64) AS prop12)
        FROM `my_dataset.my_table`;

' && bq extract --destination_format AVRO  my_dataset.my_temp_table /path/to/file-1-*.avro

考虑这将生成additional cost

如果在 bq 导出期间不可能,我是否只能选择 在 spark 中读取二进制数据?

BigQuery 中的Numeric types 是 16 字节,可以将它们作为十进制使用。您可以尝试将它们转换为 decimal

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多