0

我有一个文本文件 schema.txt,其中定义了我要创建的表的架构。

我想将此文件包含在用于创建表的多部分 HTTP 请求中。

如何在多部分 HTTP 请求中指定 schema.txt 文件?

以下是我目前正在做的事情(虽然没有工作):

def loadTable(service, projectId, datasetId, targetTableId, sourceCsv, filenm):
try:
    jobCollection = service.jobs()
    jobData = {
        'projectId': projectId,
        'configuration': {
            'load': {
                'sourceUris': [sourceCsv],
                'schema': filenm,
                'destinationTable': {
                    'projectId': projectId,
                    'datasetId': datasetId,
                    'tableId': targetTableId
                },
                'createDisposition': 'CREATE_IF_NEEDED',
                'writeDisposition': 'WRITE_TRUNCATE',
                'encoding': 'UTF-8'
             }
        }
    }

filenm“schema.txt”在哪里。

我知道我可以直接将架构指定为:

'schema': {
    'fields': [
               {
                   'name': 'level',
                   'type': 'STRING',
               },
               {
                   'name': 'message',
                   'type': 'STRING',
               }
              ]
           },

但相反,我想指定包含架构的文件。

4

1 回答 1

0

嗯,除非您直接从文件中摄取,否则不确定为什么需要“多部分 HTTP 请求”。您在此处指定 CSV 输入,表示 Cloud Storage 对象。

有关更多信息,请参见此处: https ://developers.google.com/bigquery/docs/developers_guide#storageimport

无论如何,这不是一个真正的 BigQuery 问题,更多的是一个 Python 问题。你是这个意思吗?

import json

def loadTable(project_id, dataset_id, target_table, source_csv, filename):

  file = open(filename, 'r')
  schema = file.read()
  file.close()

  schema_json = json.loads('{%s}' % schema)

  job_data = {
    "projectId": project_id,
      "configuration": {
            "load": {
                "sourceUris": [source_csv],
                "schema": schema_json,
                "destinationTable": {
                    "projectId": project_id,
                    "datasetId": dataset_id,
                    "tableId": target_table
                },
                "createDisposition": "CREATE_IF_NEEDED",
                "writeDisposition": "WRITE_TRUNCATE",
                "encoding": "UTF-8"
             }
        }
    }


  print json.dumps(job_data, indent=2)

loadTable('project_id', 'dataset_id', 'target_table', 'source_csv', '/tmp/schema.txt')
于 2012-06-13T23:40:46.707 回答