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

Teradata Vantage™ - Native Object Store 入門ガイド

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1214-175K-JPN
Language
日本語 (日本)

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外部テーブルを除く)
    • Parquet外部テーブルでのPARTITION統計の収集
    • ALTER TABLE操作
    • テーブルの内容を変更するDML操作(INSERT、UPDATE、DELETE)

Parquetの形式の制限事項

  • READ_NOSテーブル演算子は、Parquetをサポートしていません。ただし、READ_NOSを使用して、RETURNTYPE('NOSREAD_PARQUET_SCHEMA')でParquetスキーマを表示することができます。これは、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 DefAuth
AS DEFINER TRUSTED
USER 'YOUR-ACCESS-KEY-ID'
PASSWORD 'YOUR-SECRET-ACCESS-KEY;

例のテーブルを作成します。

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

選択:

SELECT payload FROM bad_numeric_data;

結果:

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リクエストでは、エラーが返される可能性があります。リクエストがエラーを受け取った場合、このリクエストによって書き込まれたオブジェクトは外部ストレージから削除されず、s3cmdなど、外部オブジェクト ストア ベンダーが提供するツールを使用して手動でクリーンアップする必要があります。これを回避するために、Teradataは同時リクエストに対して一意の場所を指定することを推奨します。
  • 同じ場所の同じパス名を持つオブジェクトを書き込もうとすると、エラーが報告されます。
  • マニフェスト ファイルは累積されません。マニフェストにエントリを追加する場合は、元のエントリと追加するエントリを含む新しいマニフェストを作成する必要があります。
  • 同じ場所に別のマニフェスト ファイルを書き込もうとすると、エラーが報告されます。同じ場所にあるマニフェストを置き換えるには、MANIFESTONLY('TRUE')キーワードと共にOVERWRITE('TRUE')を使用します。