首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BigQuery流插入需要时间(分钟)来编写大量的应用程序。

BigQuery流插入需要时间(分钟)来编写大量的应用程序。
EN

Stack Overflow用户
提问于 2022-09-01 02:44:02
回答 1查看 173关注 0票数 0

我有一个编写量很大的Springboot应用程序,它与Bigquery集成用于重载,面向10分钟插入一些entries.Here是我的配置。

存储的条目数:100万/min

吊舱数: 100

插入类型:流数据(使用JsonStreamWrite)

部署云: Azure

插入平均时间: 650毫秒

最长时间: 22分钟(一次插入)

每Pod线程数:15个线程

每个吊舱都有一个BigQuery连接,并尝试在BigQuery中插入。现在,当10%的插入在几分钟内花费时间时,我们面临很多超时和性能问题。是否有一种有效的方法可以在BigQuery中用如此大的负载写入数据。

我们使用以下Google客户端库

代码语言:javascript
运行
复制
    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-storage</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-bigquerystorage</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-bigquery</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependencies>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>libraries-bom</artifactId>
            <version>25.4.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>



private void updateRequestMetadataOperations(JSONArray requestMetaDataArr){

    JSONArray firstObjArr = new JSONArray();

        JSONObject firstTableJsonObj = new JSONObject();
        firstTableJsonObj.put("firstColumn",firstColumnVal);
        firstTableJsonObj.put("secondColumn",secondColumnVal);
        firstTableJsonObj.put("thirdColumn",thirdColumnVal);
        firstTableJsonObj.put("fourthColumn",fourthColumnVal);
        firstTableJsonObj.put("fifthColumn",fifthColumnVal);
        firstTableJsonObj.put("sixthColumn",sixthColumnVal);
        .
        .
        .
        firstTableJsonObj.put("twentyColumn",twentyColumnVal);

        
        firstObjArr.put(firstTableJsonObj);
    }

 public void insertIntoBigQuery(String tableName, JSONArray jsonArr) throws Exception{
    if(jsonArr.length()==0){
           return;
       }
       JsonStreamWriter jsonStreamWriter = JsonStreamWriterUtil.getWriteStreamMap(tableName);
       if(jsonStreamWriter!=null) {
           jsonStreamWriter.append(jsonArr);
       }
   }



public JsonStreamWriter createWriteStream(String table) throws IOException, Descriptors.DescriptorValidationException, InterruptedException {
      BigQueryWriteClient bqClient = BigQueryWriteClient.create();
      WriteStream stream = WriteStream.newBuilder().setType(WriteStream.Type.COMMITTED).build();
      TableName tableName = TableName.of("ProjectId", "DataSet", table);
      CreateWriteStreamRequest createWriteStreamRequest =
              CreateWriteStreamRequest.newBuilder()
                      .setParent(tableName.toString())
                      .setWriteStream(stream)
                      .build();
      WriteStream writeStream = bqClient.createWriteStream(createWriteStreamRequest);

      JsonStreamWriter jsonStreamWriter = JsonStreamWriter
              .newBuilder(writeStream.getName(), writeStream.getTableSchema())
              .build();
      return jsonStreamWriter;
  }
EN

回答 1

Stack Overflow用户

发布于 2022-09-05 08:03:25

一般来说,BigQuery流插入是为了小的实时数据更新,它是轻量级和fast.Batch或加载,另一方面,接受文件上传,它意味着更大和更重的更新。BigQuery存储写入API是一个统一的BigQuery数据摄取API。它将流吞食和批量加载结合到一个高性能的API接口中。

是否有一种有效的方法可以在BigQuery中使用如此大的负载编写数据?

插入过程针对批量操作进行了优化,从而提高了性能,减少了加载时间。还请注意,较大的有效负载也会导致缓慢的插入,特别是如果它来自具有额外延迟的外部网络。如果您需要获得速度,您总是可以选择一个异步方法。将You can always consider using a message bus like Pub/Sub with Dataflow写入BigQuery.The存储写入API是一种使用双向连接的gRPC API。AppendRows方法创建到流的连接。通常,单个连接至少支持1MB/s的吞吐量。上限取决于几个因素,如网络带宽、数据模式和服务器负载,但可能超过10 If /s。如果需要更多的吞吐量,则创建更多的连接。对于报价和限制,您也可以参考本文档。

按照GCP代码createWriteStream,您的示例方法似乎很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73563793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档