Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 多云sql表导出为csv_Google Cloud Platform_Google Cloud Sql - Fatal编程技术网

Google cloud platform 多云sql表导出为csv

Google cloud platform 多云sql表导出为csv,google-cloud-platform,google-cloud-sql,Google Cloud Platform,Google Cloud Sql,是否有一种方法可以通过从云SQL发出特定查询将多个SQL表导出为csv 下面是我目前拥有的代码。当我为多个表背靠背调用exportTables时,我看到一个409错误。这可能是因为云sql实例正忙于导出,不允许后续的导出请求 我怎样才能让它工作?这里的理想解决方案是什么 private void exportTables(String table_name, String query) throws IOException, InterruptedException { HttpClie

是否有一种方法可以通过从云SQL发出特定查询将多个SQL表导出为csv

下面是我目前拥有的代码。当我为多个表背靠背调用exportTables时,我看到一个409错误。这可能是因为云sql实例正忙于导出,不允许后续的导出请求

我怎样才能让它工作?这里的理想解决方案是什么

  private void exportTables(String table_name, String query)
  throws IOException, InterruptedException {
HttpClient httpclient = new HttpClient();
PostMethod httppost =
    new PostMethod(
        "https://www.googleapis.com/sql/v1beta4/projects/"
            + "abc"
            + "/instances/"
            + "zxy"
            + "/export");

String destination_bucket =
    String.join(
        "/",
        "gs://" + "test",
        table_name,
        DateTimeUtil.getCurrentDate() + ".csv");

GoogleCredentials credentials =
    GoogleCredentials.getApplicationDefault().createScoped(SQLAdminScopes.all());
AccessToken access_token = credentials.refreshAccessToken();
access_token.getTokenValue();
httppost.addRequestHeader("Content-Type", "application/json");
httppost.addRequestHeader("Authorization", "Bearer " + access_token.getTokenValue());
String request =
    "{"
        + "  \"exportContext\": {"
        + "    \"fileType\": \"CSV\","
        + "    \"uri\":\""
        + destination_bucket
        + "\","
        + "    \"databases\": [\""
        + "xyz"
        + "\"],"
        + "    \"csvExportOptions\": {"
        + "      \"selectQuery\": \""
        + query
        + "\""
        + "    }\n"
        + "  }"
        + "}";
httppost.setRequestEntity(new StringRequestEntity(request, "application/json", "UTF-8"));

httpclient.executeMethod(httppost);
if (httppost.getStatusCode() > 200) {
  String response = new String(httppost.getResponseBody(), StandardCharsets.UTF_8);
  if (httppost.getStatusCode() != 409) {
    throw new RuntimeException(
        "Exception occurred while exporting the table: " + table_name + " Error " + response);
  } else {
    throw new IOException("SQL instance seems to be busy at the moment. Please retry");
  }
}
httppost.releaseConnection();
logger.info("Finished exporting table {} to {}", table_name, destination_bucket);

}

我没有建议直接解决云SQL上的问题,但有了一个新工具,可以按顺序执行导出:

  • 用JSON定义您想要的数据格式,以定义一个导出
  • 然后为您的工作流提供一系列配置
  • 在这个工作流中,
    • 在配置阵列上创建一个循环
    • 对云SQL执行API调用,以在每个配置上生成导出
    • 获取API调用的答案,您就有了jobId
    • 睡一会儿
    • 检查导出是否结束(使用作业ID)。
      • 如果没有,请睡眠并再次检查
      • 如果是,则循环(从而开始下一次导出)

它是无服务器的,免费层使这个用例免费。

我没有建议直接在云SQL上解决这个问题,但有一个解决方案可以通过一个新工具按顺序执行导出:

  • 用JSON定义您想要的数据格式,以定义一个导出
  • 然后为您的工作流提供一系列配置
  • 在这个工作流中,
    • 在配置阵列上创建一个循环
    • 对云SQL执行API调用,以在每个配置上生成导出
    • 获取API调用的答案,您就有了jobId
    • 睡一会儿
    • 检查导出是否结束(使用作业ID)。
      • 如果没有,请睡眠并再次检查
      • 如果是,则循环(从而开始下一次导出)

它是无服务器的,免费层使这个用例免费。

您想按顺序运行几个导出吗?当你同时有两个,你就有了冲突(409),对吗?您是否尝试将
offload:true
值添加到请求正文中的
exportContext
对象中?它能解决问题吗?@guillaumeblaquiere我还没试过。让我试着添加这个。@guillaumeblaquiere
offload:true
对meDo不起作用你的意思是仍然是相同的409错误?你想按顺序运行几个导出,对吗?@guillaumeblaquiere。是的,我也犯了同样的错误。是的,我想按顺序运行几个导出。你想按顺序运行几个导出吗?当你同时有两个,你就有了冲突(409),对吗?您是否尝试将
offload:true
值添加到请求正文中的
exportContext
对象中?它能解决问题吗?@guillaumeblaquiere我还没试过。让我试着添加这个。@guillaumeblaquiere
offload:true
对meDo不起作用你的意思是仍然是相同的409错误?你想按顺序运行几个导出,对吗?@guillaumeblaquiere。是的,我也犯了同样的错误。是的,我想按顺序运行几个导出。