ポリベースを使用して寄木細工のファイルをインポートしています。
時間の経過とともに、ファイル内の名前付き列を追加または削除する可能性があります。
列を追加すると、次のエラーが発生します。
内部エラーのため、外部ファイルへのアクセスに失敗しました: 'ファイルtest.parquet:HdfsBridge :: CreateRecordReader-レコードリーダーの作成中に予期しないエラーが発生しました:HadoopExecutionException:列数が一致しません。ソースファイルには16列あり、外部テーブル定義には15列あります。
これは、外部テーブル定義にない列を追加したためです。
寄木細工にはファイルスキーマが含まれており、外部テーブルは各列の名前を知っているので、余分な未使用の列を無視するように設定できる方法はありますか?
Polybaseにはこの機能はありません。ソースファイルと外部テーブルの定義は、機能するために一致している必要があります。外部テーブル定義で列を追加または削除するだけです。次に、CTASなどを介してデータベースにテーブルを物理的に作成するときに、CTASステートメントから追加の列を追加または削除します。
あるいは、新しい COPY INTO ステートメントを検討してください。これには、列リストを指定する機能があります。たとえば、
COPY INTO test_parquet ( col1, col2, col3, col4 )
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/*.parquet'
WITH (
FILE_FORMAT = myFileFormat
CREDENTIAL = ( IDENTITY = 'Shared Access Signature', SECRET = '<Your_SAS_Token>' )
)
ただし、この機能はi)現在プレビュー中、ii)物理テーブル(つまり、外部テーブルではない)にコピーする場合、およびiii)列リストをParquetで具体的にテストしていないことに注意してください。