BigQueryIO.write DynamicDestination withCreateDisposition - Кластеризация полей - PullRequest
0 голосов
/ 17 декабря 2018

BigQueryIO.write.withCreateDisposition (CreateDisposition.CREATE_IF_NEEDED) вместе с DynamicDestination мы можем записать в динамическую таблицу, и если таблица не существует, она создаст таблицу из TableSchema, предоставленной из DynamicDestination.

Я не являюсьвозможность добавить поля кластеризации в модель TableSchema, потому что у нее нет такой возможности.

как мы можем добавить DynamicDestination с TableSchema с полями кластеризации?

1 Ответ

0 голосов
/ 17 декабря 2018

API BigQuery - это один из способов добавить поле кластера в таблицу.

Используя эту ссылку , вы можете протестировать API перед написанием кода

function execute() {
return gapi.client.bigquery.jobs.insert({
  "resource": {
    "configuration": {
      "query": {
        "clustering": {
          "fields": [
            "Field1",
            "Field2"
          ]
        },
        "query": "select 5",
        "destinationTable": {
          "datasetId": "Id1",
          "projectId": "Project1",
          "tableId": "T1"
        }
      }
    }
  }
})
    .then(function(response) {
            // Handle the results here (response.result has the parsed body).
            console.log("Response", response);
          },
          function(err) { console.error("Execute error", err); });

}

И это пример JS о том, как манипулировать параметрами:

static setConfiguration(params, configuration) {
    //To have a destination table we MUST have a tableId
    if (params.destinationTable && params.destinationTable.tableId) {
        configuration.query.destinationTable = params.destinationTable

    }
    if (params.clusteringFields) {
        configuration.query.clustering = {fields: params.clusteringFields}
    }
    if (params.timePartitioning) {
        configuration.query.timePartitioning = {
            type: 'DAY',
            field: params.timePartitioning
        }
    }
    if (params.writeDisposition) {
        configuration.query.writeDisposition = params.writeDisposition
    }
    if (params.queryPriority && params.queryPriority.toUpperCase() === "BATCH") {
        configuration.query.priority = "BATCH"
    }
    if (params.useCache === false) {
        configuration.query.useQueryCache = params.useCache
    }
    if (params.maxBillBytes) {
        configuration.query.maximumBytesBilled = params.maxBillBytes
    }
    if (params.maxBillTier) {
        configuration.query.maximumBillingTier = params.maxBillTier
    }
}
...