将数据从BigQuery导出到GCS-可以部分传输吗?

主动学习者

目前,我正在将数据(从Bigquery中的目标表中)导出到GCS中的存储桶中。使用Bigquery API以编程方式执行此操作。

将数据从Bigquery导出到GCS时存在一个约束-数据不应大于1GB。

  • 由于目标表中的数据超过1GB,因此我将文件分为多个部分。
  • 拆分文件的部分数量显然取决于目标表中数据的大小。

这是发生这种情况的函数exportDataToGCS()的代码片段:

http = authorize();
bigquery_service = build('bigquery', 'v2', http=http)

    query_request = bigquery_service.jobs()

    DESTINATION_PATH = constants.GCS_BUCKET_PATH + canonicalDate + '/'
    query_data = {
                'projectId': 'ga-cnqr',
                'configuration': {
                                'extract': {
                                        'sourceTable': {
                                                    'projectId': constants.PROJECT_ID,
                                                    'datasetId': constants.DEST_TABLES_DATASET_ID,
                                                    'tableId': canonicalDate,
                                                        },
                                        'destinationUris': [DESTINATION_PATH + canonicalDate + '-*.gz'],
                                        'destinationFormat': 'CSV',
                                        'printHeader': 'false',
                                        'compression': 'GZIP'
                                            }
                                }
                  }

    query_response = query_request.insert(projectId=constants.PROJECT_NUMBER,
                                     body=query_data).execute()

执行此功能后,在我的GCS存储桶中,我的文件以以下方式显示:

从BigQuery导出后,将零件保存在GCS存储桶中

但是,我很想知道是否可以在任何情况下将文件拆分为10个部分,但由于上述功能失败,因此只有3个部分进入了存储桶。

也就是说,是否会有部分出口?

诸如网络中断或运行该功能的进程被杀死等原因是否会导致此?此过程是否是阻止呼叫?异步?

提前致谢。

更新1:查询响应中的状态参数

这就是我检查“已完成”状态的方式。

while True:
        status = query_request.get(projectId=constants.PROJECT_NUMBER, jobId=query_response['jobReference']['jobId']).execute()
        if 'DONE' == status['status']['state']:
            logging.info("Finished exporting for the date : " + stringCanonicalDate);
            return
迈克尔·谢尔顿(Michael Sheldon)

如果作业在执行过程中由于某种原因失败,则可能会部分导出。

如果作业处于“已完成”状态,并且作业中没有错误,则说明已导出所有数据。

我建议在轮询完成的工作之前要稍等-如果轮询速度太快,可能会遇到速率限制错误,并且鉴于这些异步作业不是很快,因此不需要毫秒级的准确性。

使用示例代码,可以通过以下方法测试是否存在错误:

while True:
    status = query_request.get(projectId=constants.PROJECT_NUMBER, jobId=query_response['jobReference']['jobId']).execute() 
    if 'DONE' == status['status']['state']:
        if 'errorResult' in status['status']:
            logging.error("Error exporting for the date : " + stringCanonicalDate);
            logging.error(status['status']['errorResult'])
            return False
        logging.info("Finished exporting for the date : " + stringCanonicalDate);
        return True
    time.sleep(1)

为了超级健壮,您还可以捕获在轮询等待循环中偶尔发生的HTTP错误。看来您正在使用python apiclient,它会引发apiclient.errors.HttpError此类故障。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将Firebase Crashlytics数据部分导出到BigQuery

使用JSON将数据从Python导出到Tableau吗?

我可以自动将数据从Cognos报表导出到数据库吗?

是否可以将Firebase Cloud Firestore数据导出到Postgresql?

是否可以将JIRA中的数据动态导出到Excel?

是否可以从QGIS将形状数据从shapefile导出到CSV?

如何将Google Analytics(分析)数据导出到Google GCS存储桶或BigQuery?

您可以将Entity Framework 6模型导出到数据库项目中吗?

当非阻塞send()仅传输部分数据时,我们可以假定它在下一次调用时将返回EWOULDBLOCK吗?

将数据从bigquery导出到csv

我可以部分导出Show吗?

我可以将tensorflow摘要导出到CSV吗?

使用 android studio 将数据导出到谷歌表:如何在活动之间传输变量?

我可以说用usb传输数据是API吗?

我可以通过JavaScript事件在元素之间传输数据吗?

可以在两条路由之间传输数据吗?

将熊猫数据框作为CSV文件导出到Azure Data Lake Storage吗?

是否可以将pubnub聊天消息导出到Postgresql数据库?

是否可以将Firestore数据导出到本地文件路径而不是Cloud Storage路径?

将Google BigQuery数据导出到Python Pandas数据框

将BigQuery表以CSV或JSON格式导出到GCS,生成文件类型文件

Firebase Analytics:将数据作为日期导出到 BigQuery

如何将数据从Cassandra导出到BigQuery

将嵌套的BigQuery数据导出到云存储

每天如何将数据从Cloud SQL导出到BigQuery?

如何将数据从 Bigquery 导出到 Postgres

您可以将数据传输到pairwise.t.test吗?

是否可以将特定的数据从SQL数据库导出到Word文档中的预格式化表中?

VBA 宏 - 将表格数据从 Excel 文件导出到 Word 并为每个工作表创建一个部分