【问题标题】:BigQuery: Load from CSV, skip columnsBigQuery:从 CSV 加载,跳过列
【发布时间】:2014-11-02 06:52:03
【问题描述】:

假设我有一个包含现有数据的表,其架构如下:

{ 'name' : 'Field1', 'type' : 'STRING' },
{ 'name' : 'Field2', 'type' : 'STRING' }

我们的数据是 CSV:

Field1,Field2
Value1,Value2
...

我们通过创建新作业来加载数据,直接从 Google Cloud Storage (GCS) 加载 CSV。我们的数据文件现在有一个额外的列和不同的顺序,因此数据现在是结构化的:

Field1,Field3,Field2
Value1,Value3,Value2
...

有没有办法在加载作业中指定我们想跳过第二列,只加载第 1 列和第 3 列(名为 Field1 和 Field2)?

我正在使用 Python API,例如 service.jobs().insert(job_body)

基本上我想做这样的事情:

job_body = {
  'projectId': projectId,
  'configuration': {
      'load': {
        'sourceUris': [sourceCSV],
        'schema': {
          'fields': [
            {
              'name': 'Field1',
              'type': 'STRING'
            },
            { # this would be the skipped field
              'name': None
              'skip': True
            },
            {
              'name': 'Field2',
              'type': 'String'
            },
          ]
        },
        'destinationTable': {
          'projectId': projectId,
          'datasetId': datasetId,
          'tableId': targetTableId
        },
      }
    }
  }

谢谢!

【问题讨论】:

    标签: python csv google-bigquery


    【解决方案1】:

    目前无法做到这一点,但这可能是一个有趣的功能请求。随意添加到https://code.google.com/p/google-bigquery/issues/list

    与此同时,我会进行两步导入:

    1. 导入为具有 3 列的新表。
    2. 将“SELECT column1, column2 FROM [newtable]”追加到现有表中。

    【讨论】:

    • 大查询现在也支持SELECT *EXCPET(column_you_dont_want) from new_table
    【解决方案2】:

    Felipe 的建议应该可行。另一种可能性是,如果您能够修改要加载到 BigQuery 中的 CSV,那就是加载作业上的 ignoreUnknownValues 标志:

    [可选] 接受包含与架构不匹配的值的行。未知值被忽略。默认值为 false ,它将未知值视为错误。对于 CSV,这会忽略行尾的额外值。对于 JSON,这会忽略不匹配任何列名的命名值。

    但是,使用此标志需要对 CSV 中的列重新排序或将数据格式化为 JSON。

    【讨论】:

    猜你喜欢
    • 2018-02-25
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    相关资源
    最近更新 更多