在多部分 http 请求中指定驻留在文件上的 bigquery 表架构

Posted

技术标签:

【中文标题】在多部分 http 请求中指定驻留在文件上的 bigquery 表架构【英文标题】:Specifying bigquery table schema that resides on a file in a multipart http request 【发布时间】:2012-06-12 12:40:19 【问题描述】:

我有一个文本文件 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',
               
              ]
           ,

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

【问题讨论】:

【参考方案1】:

嗯,除非您直接从文件中提取,否则不确定为什么需要“多部分 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')

【讨论】:

以上是关于在多部分 http 请求中指定驻留在文件上的 bigquery 表架构的主要内容,如果未能解决你的问题,请参考以下文章

如何在多部分/表单数据请求中发送对象而不在 Angular 中转换为字符串

网络请求

URL类

将带有 XML 内容的 http(s) 请求发布到 Power BI

[BI项目记]-DB脚本同步

在多线程 HTTP 服务器中发送后,如何干净地关闭套接字?