Google BigQueryでは、標準SQLを使用してパーティションテーブルをクエリするときに$
デコレータを使用しようとしています。私はこれがレガシーSQLと同じようにパーティションとテーブルのメタデータにアクセスできると考えていますが、標準SQLでは動作していないようです。
次のクエリの両方がError: Table "dataset.partitioned_table$___" cannot include decorator
を返す:
1)直接パーティションへのアクセス:
#StandardSQL
SELECT a, b, c
FROM `mydataset.partitioned_table$20161115`
2)テーブルのメタデータへのアクセス:
#StandardSQL
SELECT partition_id
FROM `mydataset.partitioned_table$__PARTITIONS_SUMMARY__`;
明白な回避策を最初のクエリではを使用します10疑似:しかし
#StandardSQL
SELECT a, b, c
FROM mydataset.partitioned_table
WHERE _PARTITIONTIME = '2016-11-15'
は、私が実際として壊れているように見える最新のパーティションを照会するためにその情報を使用しているが(最新のパーティションを取得するために有用である2番目のクエリのための回避策を見つけることができませんでしたよく参照:How to choose the latest partition in BigQuery table?)
標準SQLでデコレータを使用して直接パーティションにアクセスするサポートはありますか?クエリはBQクエリバリデータによって検証されますが、実行するとエラーが発生します。 –
現時点では、1つのパーティションにアクセスするためのパーティションでデコレータ構文をサポートする標準SQLの計画はありません。しかし、_PARTITIONTIME = TIMESTAMP( "2016-11-15")のような述部を使用することはまったく同じ動作です。より一般的な方法で '__PARTITIONS_SUMMARY__'を扱うことになります。おそらく、デコレータ構文を使用する必要はありません。 –
'_PARTITIONTIME'でフィルタリングするためにサブクエリを使用するサポートがありますか?今、あなたはそれを行うことができますが、クエリーは 'where'条件に一致するパーティションだけでなく、すべてのパーティションにわたってテーブル全体を処理します。これは明らかに理想的ではありません。 –