2016-05-06 5 views
1

私はJava APIを使用して、ドライランを使用してクエリからスキーマを取得していますが、スキーマには実際に必要なときにnull可能なフィールドが含まれています。このクエリでの例ドライランからのスキーマは必須フィールドをnullableとして返します。

、:

SELECT word FROM `bigquery-public-data.samples.shakespeare` 

「単語」フィールドは、テーブルで必要とされるにもかかわらず、私は戻って取得結果は

com.google.api.services.bigquery.model.TableSchema = 
{"fields":[{"mode":"NULLABLE","name":"word","type":"STRING"}]} 

では、これが起こることになっていますか?

答えて

1

はい、このようなことが起こる可能性があります。クエリーの結果がフィールドを選択するだけであっても、クエリ結果にはテーブルスキーマのNULLABLEとREQUIREDが異なる場合があります。一般に、列のNULL可用性の伝播は脆弱であるため、おそらくそれに依存しないほうがよいでしょう。

P.S.標準のSQL https://cloud.google.com/bigquery/sql-reference/を使用したようです(ただし、同様のことは従来のSQLでも同様です)。

+0

私は、クエリのドライランからスキーマを取得することは、標準SQLでしか使用できないと思いました。以前は、必須フィールドを正しく保存したビューを作成してスキーマを取得していました。必要なフィールドにクエリ結果がnullを含む可能性があることについてもっと詳しく説明できますか?ビューと同じスキーマを取得する別の方法があります(ビューは標準SQLではまだサポートされていないため)。 –

+0

私は異なった質問をします - それがREQUIREDまたはNULLABLEとラベル付けされるかどうかはなぜ気になりますか?あなたのアプリケーションにはどんな変更がありますか? –

+0

私のチームは、大きなクエリクライアントの周りに型安全なScala APIを構築しています。私たちのアプローチの1つは、null可能なフィールドをScala Optionタイプにマップすることです。これは、このタイプセーフなAPIのユーザーに、必要と予想されるフィールドのOptionタイプが表示されることを意味します。もちろん、アプリケーションは自由にオプションを展開することができますが、混乱の原因となり、型の安全性の目的を多少犠牲にします。従来のSQLでは、クエリからビューを作成してスキーマを取得しました。このビューは必須フィールドを保持していました。しかし、現在はドライランを使用して、必要なフィールドがnullableとして戻ってくるので、すべてがオプションです。 –

関連する問題