2017-04-05 17 views
1

F#用の型プロバイダを使用しています。これを実装するには、クエリのコンパイル時にスキーマを取得する必要があります。 。HTTP APIを使用してBigQueryクエリのメタデータを取得するには

bq query --format=json --dry_run=true --use_legacy_sql=false 'SELECT @a IS TRUE AS x, @b + 1 AS y, "foo" = @c AS z, ["tomas", "jansson"] as w, STRUCT("wat" as t, 69 as u) as v, [STRUCT(3, "allo" as g), STRUCT(5 as a, "yolo")] as u, STRUCT(["a"] as h) as t;' 

私たちが望むまさにんが、それはbqツールを使用しています。今の時点では、私たちはこのような何かを実行します。私はコードベースで見つけるのが難しい、根底にあるhttp呼び出しが何であるか知りたい。

基本的なコードベースを知りたいのは、できるだけ多くのサードパーティの依存関係を削除したいからです。これは、ビルドサーバーでは利用できないか、または長い時間をかけて設定する必要があります。

+0

'bq'ツールで行われている基本的なhttp API呼び出しを知る良いヒントは、apiフラグを使うことです。例: 'bq query --apilog = true --format = json --dry_run = true --use_legacy_sql = false 'select count(*)FROM lookerdata:cdc.project_tycho_reports;' 'すべてのフラグを見るには' bq - -help | grep "\ - api" ' –

答えて

1

またはすることができます

Jobs: insertquery構成プロパティとdryRunがtrueに設定されているe

+0

これはうまくいきました。ありがとうございました! –

1

編集:Mikhail is right; jobs.insert APIのみがスキーマ情報を提供します。私はこの答えを使って現在の動作を文書化します。ここでは、jobs.insert APIを使用して

はサンプル要求と応答である:ここで

PROJECT="YOUR_PROJECT_NAME" 
QUERY="\"SELECT 1 AS x, 'foo' AS y, @b IS FALSE AS z;\"" 
REQUEST="{\"configuration\":{\"dryRun\":true,\"query\":{\"useLegacySql\":false,\"query\":${QUERY}}}}" 
echo $REQUEST | \ 
curl -X POST -d @- -H "Content-Type: application/json" \ 
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \ 
    https://www.googleapis.com/bigquery/v2/projects/$PROJECT/jobs 

(some parts omitted) 
"statistics": { 
"query": { 
    "schema": { 
    "fields": [ 
    { 
    "name": "x", 
    "type": "INTEGER", 
    "mode": "NULLABLE" 
    }, 
    { 
    "name": "y", 
    "type": "STRING", 
    "mode": "NULLABLE" 
    }, 
    { 
    "name": "z", 
    "type": "BOOLEAN", 
    "mode": "NULLABLE" 
    } 
    ] 
    }, 
    "undeclaredQueryParameters": [ 
    { 
    "name": "b", 
    "parameterType": { 
    "type": "BOOL" 
    } 
    } 
    ], 
    "statementType": "SELECT" 
} 

は、比較のために、jobs.queryを使用したサンプルリクエストとレスポンスです:

PROJECT="YOUR_PROJECT_NAME" 
QUERY="\"SELECT 1 AS x, 'foo' AS y, @b IS FALSE AS z;\"" 
REQUEST="{\"kind\":\"bigquery#queryRequest\",\"dryRun\":true,\"useLegacySql\":false,\"query\":$QUERY}" 
echo $REQUEST | \ 
    curl -X POST -d @- -H "Content-Type: application/json" \ 
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \ 
    https://www.googleapis.com/bigquery/v2/projects/$PROJECT/queries 

{ 
"kind": "bigquery#queryResponse", 
"jobReference": { 
    "projectId": "<omitted>" 
}, 
"totalBytesProcessed": "0", 
"jobComplete": true, 
"cacheHit": false 
} 
+0

ありがとうございます。私は明日最初にもう一度試してみます。私は以前はドライランを試しましたが、スキーマではなく数字だけが戻ってきました。間違ったことをしたかもしれない。 –

+0

試してみるとスキーマが得られないようです。データは、私はバックを取得: '{ "種類": "BigQueryの#1 queryResponse"、 "jobReference":{ "PROJECTID": "UC-PROX-開発" }、 "totalBytesProcessed": "0"、 "jobComplete":true、 "cacheHit":false } 'このページでAPIを試しました:https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query#parameters –

+0

しかし、他の回答はうまくいくが、APIではなくクエリAPIに直接行くときにスキーマを含むようにAPIを更新する必要がある。 –

関連する問題