2012-06-12 31 views
0

我有一個文本文件schema.txt,其中定義了要創建的表的架構。指定駐留在多部分http請求中的文件中的bigquery表架構

我想包含此文件在我用來創建我的表的多部分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', 
       } 
       ] 
      }, 

而是我想指定包含模式的文件。

回答

0

嗯,不知道爲什麼你需要一個「多部分HTTP請求」,除非你直接從文件攝入。在這裏您指定一個CSV輸入,指示一個雲存儲對象。

這裏看到更多的信息: 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') 
相關問題