Native Object Storeの制限 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/spp1591731285373.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

これらのNative Object Storeの制限は、CREATE FOREIGN TABLE文に関連しています。

CSVおよびJSONペイロードのサイズ

  • CSVおよびJSONデータ形式のREAD_NOSでは、最大ペイロード サイズは16,776,192バイトです。
    • UNICODEの場合、8,388,096文字に相当します。
    • LATINの場合、16,776,192文字に相当します。

実際のペイロード サイズは、データセットの個別レコード サイズと同じになります。

Parquetページのサイズ

READ_NOSとWRITE_NOSの両方でサポートされるParquetページの最大サイズは、16,776,192バイトです(LOB列およびLOBベースのUDT列を含む)。

Parquetレコード内の一部のデータがバイナリの場合、最大文字数はそれに応じて減少します。

外部テーブルの制限

  • 下記の項目は、外部テーブルではサポートされません。
    • プライマリ インデックス
    • セカンダリ インデックス
    • 結合インデックス
    • ハッシュ インデックス
    • 行または列のパーティション化(列のパーティション化が必要なParquet外部テーブルを除く)
    • テーブルの内容を変更するDMLの操作(INSERT、UPDATE、DELETE)

Parquet形式の制限

  • STRUCT、MAP、LIST、ENUMなど、特定の複合データ型はサポートされません。
  • STRUCTデータ型はサポートされないので、入れ子のParquetオブジェクト ストアはNative Object Storeで処理できません。

数値フィールドの不適切な値

CSVまたはJSONデータセットと同様に、新しくアップロードされたAmazon S3ファイルの数値フィールドに不適切な値が1つ含まれていると、NOSテーブルが使用できなくなる原因になります。このような場合は、TRYCASTを使用して不適切なレコード/フィールドを特定できます。まず、新しいAmazon S3ファイルをオブジェクト ストレージの一時的な場所にアップロードし、TRYCASTを使用して数値データが破損していないことを確認できます。これにより、そのデータをオブジェクト ストア内の固定格納場所に移動できます。<Teradata Vantage™ - SQL関数、式、および述部、B035-1145>を参照してください。

例:

許可オブジェクトを作成していない場合は、作成します。

CREATE AUTHORIZATION MyAuthObj
USER 'YOUR-ACCESS-KEY-ID'
PASSWORD 'YOUR-SECRET-ACCESS-KEY;

サンプルのテーブルを作成します。

CREATE MULTISET FOREIGN TABLE bad_numeric_fields
, EXTERNAL SECURITY MyAuthObj
USING (
     LOCATION  ('/s3/td-usgs-public.s3.amazonaws.com/DATA-BAD/bad_numeric_data')
);

選択:

SELECT payload FROM bad_numeric_fields;

結果:

Payload
----------------------------------------------------------------------------
{ "site_no":"09396100", "datetime":"2018-07-16 00:00", "Flow":"44.7", "GageHeight":"1.50", "Precipitation":"0.00", "GageHeight2":"1.50"}
{ "site_no":"09396100", "datetime":"2018-07-14 00:00", "Flow":"232", "GageHeight":"2.16", "Precipitation":"0.00", "GageHeight2":"2.16"}
{ "site_no":"09396100", "datetime":"2018-07-14 00:14", "Flow":"186", "GageHeight":"2.05", "Precipitation":"", "GageHeight2":"2.05"}
{ "site_no":"09400812", "datetime":"2018-07-12 00:09", "Flow":"", "GageHeight":"jjjj", "Precipitation":"bcde", "BatteryVoltage":"12.5"}
{ "site_no":"09400815", "datetime":"2018-07-12 00:00", "Flow":"0.00", "GageHeight":"-0.01", "Precipitation":"0.00", "BatteryVoltage":""}
{ "site_no":"09400815", "datetime":"2018-07-12 00:07", "Flow":"", "GageHeight":"", "Precipitation":"", "BatteryVoltage":"12.5"}

テーブルから選択します。

SELECT payload.site_no, payload.GageHeight(INT) FROM bad_numeric_fields;

結果: クエリーはエラーを返します。

TRYCASTを使用して、どのデータが不適切かを割り出します。

SELECT payload.site_no (CHAR(20)), TRYCAST(payload.GageHeight AS INT) FROM bad_numeric_fields;

サンプルの結果を以下に示します。

Payload.site_no       TRYCAST(Payload.GageHeight)
--------------------  ---------------------------
09396100                                        1
09396100                                        2
09396100                                        2
09400812 ?
09400815                                        0
09400815                                        0

この結果は、site_no 09400812のレコードに不適切なデータがあることを示しています。

WRITE_NOSの制限

  • READ_NOSとWRITE_NOSの両方でサポートされるParquetページの最大サイズは、16,776,192バイトです(LOB列およびLOBベースのUDT列を含む)。WRITE_NOSは、これらのファイルを無制限に作成できます。
  • 中断された書き込み操作でオブジェクト ストア ファイルをクリーンアップする場合は、ユーザーの責任において行なわれるものとします。書き込み操作は、トランザクションのアボートやシステムのリセットなどの理由により中断される場合があります。
  • 同じ場所への同時WRITE_NOSリクエストは、エラーが返される原因になることが考えられます。リクエストでエラーが生じた場合、そのリクエストによって書き込まれたオブジェクトは外部ストレージから削除されず、s3cmdなど外部のオブジェクト ストアのベンダーが提供するツールを使用して手動でクリーンアップする必要があります。これを避けるために、同時リクエストでは固有の場所を指定することを推奨します。
  • 同じ場所に同じパス名のオブジェクトを書き込もうとすると、エラーが報告されます。
  • マニフェスト ファイルは累積されません。マニフェストにエントリを追加する場合は、元のエントリと追加するエントリを含む新しいマニフェストを作成する必要があります。
  • 同じ場所に新たなマニフェスト ファイルを書き込もうとすると、エラーが報告されます。同じ場所にあるマニフェストを置き換えるには、MANIFESTONLY('TRUE')キーワードとともにOVERWRITE('TRUE')を使用します。