使用 Google.Cloud.BigQuery.V2 实现 BigQuery 加载作业的幂等性

2024-02-12

您可以使用 Google.Cloud.BigQuery.V2 中具有 CreateLoadJob 方法的 BigQueryClient 创建 csv 加载作业,以从 Google Cloud Storage 中的 csv 文件加载数据。

如何保证此 API 的幂等性,以确保在获得响应之前网络断开且您开始重试时,不会导致相同的数据多次加载到 BigQuery 中?

API 使用示例

    private void LoadCsv(string sourceUri, string tableId, string timePartitionField)
    {
        var tableReference = new TableReference()
        {
            DatasetId = _dataSetId,
            ProjectId = _projectId,
            TableId = tableId
        };

        var options = new CreateLoadJobOptions
        {
            WriteDisposition = WriteDisposition.WriteAppend,
            CreateDisposition = CreateDisposition.CreateNever,
            SkipLeadingRows = 1,
            SourceFormat = FileFormat.Csv,
            TimePartitioning = new TimePartitioning
            {
                Type = _partitionByDayType,
                Field = timePartitionField
            }
        };

        BigQueryJob loadJob = _bigQueryClient.CreateLoadJob(sourceUri: sourceUri,
                                                            destination: tableReference,
                                                            schema: null,
                                                            options: options);

        loadJob.PollUntilCompletedAsync().Wait();
        if (loadJob.Status.Errors == null || !loadJob.Status.Errors.Any())
        {
            //Log success
            return;
        }
        //Log error
    }

您可以通过基于例如生成您自己的 jobid 来实现幂等性您加载的文件位置和目标表。

job_id = 'my_load_job_{}'.format(hashlib.md5(sourceUri+_projectId+_datasetId+tableId).hexdigest())
var options = new CreateLoadJobOptions
        {
            WriteDisposition = WriteDisposition.WriteAppend,
            CreateDisposition = CreateDisposition.CreateNever,
            SkipLeadingRows = 1,
            JobId = job_id, #add this
            SourceFormat = FileFormat.Csv,
            TimePartitioning = new TimePartitioning
            {
                Type = _partitionByDayType,
                Field = timePartitionField
            }
        };

在这种情况下,如果您尝试重新插入相同的 job_id,则会出现错误。 您还可以轻松生成此 job_id 以检查池是否失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Google.Cloud.BigQuery.V2 实现 BigQuery 加载作业的幂等性 的相关文章

随机推荐

  • 规划网络应用程序

    我即将开始建立新的初创公司 因此我需要您的一些指导 规划网站的最佳方法是什么 我不认为 首先设计 然后数据库关系 然后开始开发 而是 如何规划应用程序的工作方式 是否有一些经过验证的方法 例如制作网站 蓝图 的最佳方法 例如使用某种工具或其
  • Docker php:fpm—安装 php 扩展

    我用的是官方的php fpmdocker 镜像作为我的应用程序容器的基础 所以Dockerfile像这样开始 FROM php fpm 稍后在文件中我希望有类似的内容 RUN apt get install y php7 0 gd 但这告诉
  • 连续分数

    我对连续分数的理解是它总是以分数形式表示小数 我认为连续分数总是返回小于或等于小数的值 不幸的是 我的代码有时会返回大于十进制输入的小数值 我对连续分数的理解正确吗 如果是这样 请解释一下我的代码中的错误所在 public static R
  • JavaScript 获取样式

    是否可以使用 JavaScript 获取对象的所有样式 就像是 main css myLayer position absolute width 200px height 100px color 0000ff main js var ob
  • 在 ASP.NET MVC 5 中从 Facebook v2.4 API 访问 OAuthExternalLoginCallback 中的电子邮件地址[重复]

    这个问题在这里已经有答案了 对于 Facebook API v2 3 如果设置了以下内容 用户的电子邮件地址将在回调中返回ExternalLoginCallback app UseFacebookAuthentication new Fac
  • Apache Tomcat 8 不工作。抛出 HTTP 状态 500 - java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

    我正在使用 Apache Tomcat 8 和 JDK 1 7 运行 startup bat 后 Tomcat 开始运行 但当我尝试跑步时 http localhost 8080 它显示一个错误 HTTP 状态 500 java lang
  • 提交到 Web 服务器的希伯来语字符串未收到希伯来语版本

    我从我的应用程序向网络服务器提交注册表单 EditText email EditText findViewById R id email EditText password EditText findViewById R id passwo
  • 使用 cin 检查空行

    我想检查是否有空行作为输入来执行特定操作 我尝试使用 cin peek 并检查它是否等于 n 但它没有意义 a b c 空行 在这里 我想执行我的操作 a 我试过这段代码 char a b c cin gt gt a cin gt gt b
  • MS Access 中的一对一关系

    我在 MS Access 中的两个表之间创建一对一关系时遇到问题 当我创建关系时 它默认为 多对一 并且我没有看到更改它的选项 有没有办法做到这一点 Access没有这样的概念 您可以将两个表合并为一个表 也可以在两个表上为公共字段放置唯一
  • Tomcat 访问日志中的 HTTP 状态代码 500 ClientAbortException / 管道损坏

    我们使用 Kibana 设置了一些仪表板和可视化 以监控 tomcat 为 Spring Boot Web 应用程序生成的访问日志 我们特别关注状态代码为 5xx 的请求 事实证明 如果客户端请求资源 并且在请求正在进行时取消该请求 使用C
  • 在 vb.net 中关闭数据读取器的正确点

    我在 vb net 中有这段代码 reader myCommand ExecuteReader If reader HasRows Then While reader read End While End If 我应该在之后使用 reade
  • 闪亮:动态更改选项卡名称

    我正在开发一个应该处理多种语言的闪亮应用程序 我设法动态翻译应用程序的几乎所有元素 具体取决于selectInput选择语言 然而 困难的事情 仍然是navbarPage选项卡以及tabPanels在我的页面内 我不能改变他们的名字 我尝试
  • 美丽的汤和表抓取 - lxml 与 html 解析器

    我正在尝试使用 BeautifulSoup 从网页中提取表格的 HTML 代码 table class facts label table 我想知道为什么下面的代码适用于 html parser 并打印回来none如果我改变 html pa
  • 什么是顶点数组对象?

    我今天刚刚开始从本教程学习 OpenGL http openglbook com the book http openglbook com the book 我读到了第二章 画了一个三角形 除了 VAO 这个缩写可以吗 之外 我理解了所有内
  • iOS 7/8 UITableView Cell:两个具有动态高度的 UILabel,具有可变行高的自动布局

    因此 当我只有一个标签可以根据字符串的长度更改高度时 我可以使用自动布局设置动态高度大小 我的问题是 如果我添加另一个应该执行相同操作的 UILabel 事情就不会成功 我将内容拥抱优先级和压缩阻力都设置为 1000 我收到歧义警告 如果我
  • INNER JOIN 独特 ID

    我有以下代码 FROM CTE Order cte INNER JOIN tblOrders o ON cte OrderId o Id INNER JOIN tblOrderUnits ou ON o id ou OrderId INNE
  • javafx 中具有不同单元格值的 TableView

    在下面的代码中有 4 列 在 特定值 列中 可以添加不同类型的数据 如字符串 整数 日期等 但我想在同一列中在该单元格中输入的值旁边添加一个按钮 前提是该值是字符串 像这样的东西 名字 姓氏 年龄 特别价值 詹姆斯 史密斯 10 10 10
  • 从AVPlayer获取HLS的PCM数据

    这个问题在过去几年里似乎被问过几次 但没有人回答 我正在尝试处理来自 HLS 的 PCM 数据 并且必须使用 AVPlayer 这篇文章利用了本地文件https chritto wordpress com 2013 01 07 proces
  • #value 错误,但在 VBA 中有效

    以下函数引用自彭博社 当从 Sub 过程调用时 该函数可以工作 但不能作为工作表公式 有谁知道为什么 Public Function GetRatesSTATIC As Variant Application DisplayAlerts F
  • 使用 Google.Cloud.BigQuery.V2 实现 BigQuery 加载作业的幂等性

    您可以使用 Google Cloud BigQuery V2 中具有 CreateLoadJob 方法的 BigQueryClient 创建 csv 加载作业 以从 Google Cloud Storage 中的 csv 文件加载数据 如何