2016-11-16 40 views
2

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?

答えて

1

デコレータを使用してパーティションの概要を取得することは、現時点ではStandardSQLではサポートされていません。私たちはこの分野でいくつかの仕事を計画していますが、現在入手可能なETAはありません。現在最も速いオプションは、レガシーSQLを使用してT$__PARTITIONS_SUMMARY__でクエリを実行することです。

+0

標準SQLでデコレータを使用して直接パーティションにアクセスするサポートはありますか?クエリはBQクエリバリデータによって検証されますが、実行するとエラーが発生します。 –

+0

現時点では、1つのパーティションにアクセスするためのパーティションでデコレータ構文をサポートする標準SQLの計画はありません。しかし、_PARTITIONTIME = TIMESTAMP( "2016-11-15")のような述部を使用することはまったく同じ動作です。より一般的な方法で '__PARTITIONS_SUMMARY__'を扱うことになります。おそらく、デコレータ構文を使用する必要はありません。 –

+0

'_PARTITIONTIME'でフィルタリングするためにサブクエリを使用するサポートがありますか?今、あなたはそれを行うことができますが、クエリーは 'where'条件に一致するパーティションだけでなく、すべてのパーティションにわたってテーブル全体を処理します。これは明らかに理想的ではありません。 –

関連する問題