カテゴリ:

テーブル関数

VALIDATE

COPY INTO <テーブル> コマンドの過去の実行でロードされたファイルを検証し、最初のエラーだけでなくロード中に発生したすべてのエラーを返します。

構文

VALIDATE( [<namespace>.]<table_name> , JOB_ID => { '<query_id>' | _last } )

引数

[名前空間.]テーブル名

ロードのターゲットになっていたテーブルの完全修飾名を指定します。

名前空間は、 データベース名.スキーマ名 または スキーマ名 の形式の、テーブルが存在するデータベースおよび/またはスキーマです。ユーザーセッション内でデータベースとスキーマが現在使用されている場合は オプション です。それ以外の場合は必須です。

JOB_ID => クエリID | _last

検証する COPY INTO <テーブル> コマンドの ID です。

  • ID は、Snowflakeウェブインターフェイスの History History tab ページの Query ID 列から取得できます。指定されたクエリ ID は、指定されたターゲットテーブルに対するものでなければなりません。

  • クエリID の代わりに _last が指定されている場合、指定されたターゲットテーブルに関係なく、関数は現在のセッション中に実行された最後のロードを検証します。

使用上の注意

  • この関数は、ロード中にデータを変換する COPY INTO <テーブル> ステートメントをサポートしません。

  • 検証は、 ON_ERROR = ABORT_STATEMENT (デフォルト値)を指定する COPY ステートメントに対して結果を返しません。

  • 次の場合、検証は失敗します。

    • 現在のユーザーは テーブル名 にアクセスできません。

    • 現在のユーザーは クエリID を実行したユーザーではなく、このユーザーに対するアクセス制御権限がありません。

  • ロードが実行されてから クエリID が使用するステージに新しいファイルが追加されている場合、追加された新しいファイルは検証中に無視されます。

  • ロードが実行されてからファイルが クエリID によって使用されるステージから削除された場合、削除されたファイルは見つからないと報告されます。

COPY INTO t1 FROM @%t1
  PATTERN='.*tw01.*'
  FILE_FORMAT=(NULL_IF=('') FIELD_OPTIONALLY_ENCLOSED_BY='"')
  ON_ERROR = SKIP_FILE;

COPY INTO t1;
FAILURE: Error parsing JSON: unterminated string
  File 'tables/530049/bad.json.gz', line 120
  Row 0 starts at line 1, column V
  If you would like to continue loading when an error is encountered, use other values such as 'SKIP_FILE' or 'CONTINUE' for the ON_ERROR option. For more information on loading options, please run 'info loading_data' in a SQL client.

最後に実行された COPY コマンドのエラーを返します.

SELECT * FROM TABLE(VALIDATE(t1, JOB_ID => '_last'));

-----------------------------------------------------------------+---------------------------+------+-----------+-------------+----------+--------+-----------+-------------+------------+----------------+
                              ERROR                              |           FILE            | LINE | CHARACTER | BYTE_OFFSET | CATEGORY |  CODE  | SQL_STATE | COLUMN_NAME | ROW_NUMBER | ROW_START_LINE |
-----------------------------------------------------------------+---------------------------+------+-----------+-------------+----------+--------+-----------+-------------+------------+----------------+
 Error parsing JSON: unterminated string                         | tables/530049/bad.json.gz | 120  | [NULL]    | 7504        | parsing  | 100069 | 22P02     | V           | 0          | 1              |
 Error parsing JSON: misplaced colon                             | tables/530049/bad.json.gz | 214  | 18        | 84465       | parsing  | 100069 | 22P02     | V           | 2          | 214            |
 Error parsing JSON: unknown keyword "tru"                       | tables/530049/bad.json.gz | 1467 | [NULL]    | 85337       | parsing  | 100069 | 22P02     | V           | 3          | 1445           |
 Error parsing JSON: unknown keyword "stat"                      | tables/530049/bad.json.gz | 1469 | 13        | 85353       | parsing  | 100069 | 22P02     | V           | 5          | 1469           |
 Error parsing JSON: unknown keyword "ok"                        | tables/530049/bad.json.gz | 1469 | 20        | 85360       | parsing  | 100069 | 22P02     | V           | 7          | 1469           |
 Error parsing JSON: invalid character outside of a string: '\\' | tables/530049/bad.json.gz | 1469 | 21        | 163414      | parsing  | 100069 | 22P02     | V           | 8          | 1469           |
 Error parsing JSON: misplaced }                                 | tables/530049/bad.json.gz | 1470 | 3         | 163418      | parsing  | 100069 | 22P02     | V           | 9          | 1469           |
-----------------------------------------------------------------+---------------------------+------+-----------+-------------+----------+--------+-----------+-------------+------------+----------------+

ウェブインターフェイスから取得したクエリ ID を指定してエラーを返します。

SELECT * FROM TABLE(VALIDATE(t1, JOB_ID=>'5415fa1e-59c9-4dda-b652-533de02fdcf1'));

上記と同じクエリですが、後で参照できるように結果をテーブルに保存します。

CREATE OR REPLACE TABLE save_copy_errors AS SELECT * FROM TABLE(VALIDATE(t1, JOB_ID=>'5415fa1e-59c9-4dda-b652-533de02fdcf1'));