2022_01バンドル

このトピックでは、その月における次の動作の変更(ある場合)について説明します。

  • 廃止された機能。

  • 有効になったバンドルされた変更。

  • その他、実装されたバンドルされていない変更。

これらの変更について質問がある場合は、 Snowflakeサポート にお問い合わせください。

今月導入された新機能、拡張機能、および修正の詳細については、 2022年3月 をご参照ください。

重要

特に明記されていない限り、これらは2022_01バンドルで変更されており、6.7の動作変更リリースにおいてデフォルトで有効になっています。

このトピックの内容:

SQL 変更点 --- 一般

トランザクション: 中止済みトランザクションをコミットするとエラーメッセージが返される

この変更により、すでに中止済みトランザクションをコミットしようとすると、エラーメッセージが返されます。

以前

中止済み(例: 別の SYSTEM$ABORT_TRANSACTION 呼び出しを介して、またはセッションがアイドル状態だったため)トランザクションで COMMIT ステートメントを実行した場合、ステートメントは次のメッセージで成功したように見えました。

Statement executed successfully.

ただし、トランザクション自体はすでに中止されていました。

COMMIT ステートメントの出力メッセージは、トランザクションが成功したことを誤って示唆していました。

現在

中止済み(例: 別の SYSTEM$ABORT_TRANSACTION 呼び出しを介して、またはセッションがアイドル状態であるため)トランザクションで COMMIT ステートメントを実行すると、ステートメントはエラーコード 000670 と次のメッセージを発生して失敗します。

000670 (57014): COMMIT failed. Your transaction '<名前>', id '<ID>', was already aborted.

SQL の変更 --- コマンドおよび関数

SHOW TAGS: 出力の新しい列

次の列が SHOW TAGS コマンドの出力に追加されました。

  • allowed_values: この新しい列は、タグがオブジェクトに割り当てられるときに設定できる文字列値を指定します。タグに allowed_values が指定されていない場合、列の値は NULL です。

この変更の影響を制限するために、この新しい列は出力の最後の列として追加されています。

SHOW USERS: ページ化された結果、限定された結果、および簡潔な出力のサポートを追加

SHOW USERS コマンドの動作が次のように変更されました。

以前

SHOW USERS コマンドは、 SQL 出力を10,000行に制限し、次の構文のみをサポートしていました。

SHOW USERS [ LIKE '<pattern>' ]
Copy
現在

SHOW USERS コマンドは、10,000行を超える行を返すために使用でき、次の構文をサポートします。

SHOW [ TERSE ] USERS [ LIKE '<pattern>' ] [ STARTS WITH '<name_string>' ] [ LIMIT <rows> [ FROM '<name_string>' ] ]
Copy

条件:

  • TERSE は、オプションで、次の出力列のサブセットのみを返します。

    name, created_on, display_name, first_name, last_name, email, org_identity, comment, has_password, has_rsa_public_key.

    デフォルト: 値なし(出力にすべての列を含む)。

  • STARTS WITH 'name_string' は、オプションで、オブジェクト名の先頭に表示される文字に基づいてコマンド出力をフィルターします。文字列は一重引用符で囲む必要があり、 大文字と小文字を区別します。たとえば、次の句は異なる結果を返します。

    ... STARTS WITH 'B' ...

    ... STARTS WITH 'b' ...

    デフォルト: 値なし(フィルタリングは出力に非適用)。

  • LIMIT rows [ FROM 'name_string' ] は、オプションで、返される行の最大数を制限すると同時に、結果の「ページネーション」を有効にします。返される実際の行数は、指定された制限より少ない場合があることに注意してください(例えば、既存のオブジェクトの数が指定された制限より少ない)。

    オプションの FROM 'name_string' サブ句は、結果の「カーソル」として効果的に機能します。これにより、指定された文字列と一致するオブジェクト名を持つ最初の行に続く指定された行数を取得できます。

    文字列は一重引用符で囲む必要があり、 大文字と小文字を区別します。加えて、文字列に完全なオブジェクト名を含める必要はありません。部分的な名前がサポートされています。

    デフォルト: 値なし(出力に制限は非適用)。

デフォルトでは、 SHOW USERS は以前と同様に10,000行を返します。アカウントが10,000ユーザーを超える場合は、コマンドを2回実行して、10,000名の制限を超えるユーザーを返すことができます。

SHOW USERS;

SHOW USERS LIMIT 10000 FROM 'JOE';
Copy
  • 最初のステートメントは、最初の10,000ユーザーを返します。返される最後の行は、ユーザー名が JOE のユーザーです。

  • 2番目のステートメントは、 JOE 以降の10,000ユーザーを返します。

SYSTEM$EXTERNAL_TABLE_PIPE_STATUS および SYSTEM$PIPE_STATUS 関数: JSON 出力での追加の詳細

SYSTEM$EXTERNAL_TABLE_PIPE_STATUS および SYSTEM$PIPE_STATUS 関数の JSON 出力には、ロード中に発生したエラーなど、特定のデータロードへの洞察を向上させるために、次の追加の文字列名/値ペアが含まれるようになりました。

名前

説明

メモ

oldestPendingFilePath

現在処理のためにキューに入れられている最も古いデータファイルへのパス。ファイルがキューに追加されたときのタイムスタンプは、既存の oldestFileTimestamp プロパティに返されます。

lastIngestedTimestamp

最新のファイルが、Snowpipeによって宛先テーブルに正常にロードされたときのタイムスタンプ。

SYSTEM$PIPE_STATUS のみ。

lastIngestedFilePath

lastIngestedTimestamp にある指定のタイムスタンプでロードされたファイルのパス。

SYSTEM$PIPE_STATUS のみ。

lastPipeErrorTimestamp

実行のためにパイプ定義の COPY INTO ステートメントをコンパイルするときのタイムスタンプは、最後にエラーを生成しました。

SYSTEM$PIPE_STATUS のみ。

lastPipeFaultTimestamp

内部のSnowflakeプロセスエラーが最後に検出されたときのタイムスタンプ。

lastPulledFromChannelTimestamp

SnowpipeがAmazon Simple Queue Service(SQS)キュー、Google Pub/Subキュー、またはMicrosoft Azureストレージキューからパイプの「オブジェクトの作成」イベント通知を最後にプルしたときのタイムスタンプ。

lastForwardedFilePath

パイプに転送された最後の「オブジェクトの作成」イベントメッセージで識別されたデータファイルのパス。

次の例は、Snowpipeで発生する一般的な問題のサンプル出力を示しています。関数出力の追加の詳細は、データロードに関するこれらの問題やその他の問題を診断するのに役立ちます。

  • 通知キューの不正な構成:

    {"executionState":"RUNNING","pendingFileCount":0,"notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":0,"lastPulledFromChannelTimestamp:"2022-01-20T06:24:44.771Z"}
    
    Copy

    Snowpipeは、Amazon Simple Queue Service(SQS)キュー、Google Pub/Subキュー、またはMicrosoft Azureストレージキューから、パイプの「オブジェクトの作成」イベント通知を定期的にプルしようとします。 lastPulledFromChannelTimestamp 値がないか古い場合は、Snowpipeがストレージキューに接続できなかったことを示します。

    lastPulledFromChannelTimestamp タイムスタンプが最新で、 numOutstandingMessagesOnChannel0 の場合、Snowpipeはキューからイベント通知を受信できますが、通知はキューに入れられませんでした。この最後の問題は、ストレージの場所にデータファイルが作成されていない場合や、キューへのサブスクリプションが正しく構成されていない場合に発生する可能性があります。

  • 通知キューの権限の問題:

    {"executionState":"RUNNING","pendingFileCount":0,"lastIngestedTimestamp":"2022-01-20T04:30:02.518Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T04:30:02.319Z","lastForwardedMessageTimestamp":"2022-01-20T04:30:03.27Z","channelErrorMessage":"no monitoring permission: numOutstandingMessagesOnChannel is not accurate","lastErrorRecordTimestamp":"2022-01-20T04:44:08.461Z","lastPulledFromChannelTimestamp":"2022-01-20T04:44:08.461Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    channelErrorMessage の値は、ストレージキューにアクセスしてイベント通知をプルするための十分な権限がSnowflakeに付与されていないことを示します。

  • パイプ定義とイベント通知構成で指定されたパスの不一致:

    {"executionState":"RUNNING","pendingFileCount":0,"lastIngestedTimestamp":"2022-01-20T06:00:01.669Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T06:04:01.089Z","lastForwardedMessageTimestamp":"2022-01-20T06:00:02.741Z","lastPulledFromChannelTimestamp":"2022-01-20T06:05:28.49Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    lastForwardedMessageTimestamp タイムスタンプが lastReceivedMessageTimestamp より前です。これは、Snowpipeがストレージキューから少なくとも1つの「オブジェクトの作成」イベントメッセージをプルしたが、メッセージがパイプで定義されたパスと一致しなかったため、処理のためにパイプに転送されなかったことを示します。

  • 外部ストレージの場所の権限問題:

    {"executionState":"STALLED_STAGE_PERMISSION_ERROR","pendingFileCount":0,"error":"Failed to access the stage, please check storage permission.", "lastPipeErrorTimestamp":"2022-01-20T04:40:01.747Z", "lastIngestedTimestamp":"2022-01-20T04:30:02.518Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T04:30:02.319Z","lastForwardedMessageTimestamp":"2022-01-20T04:30:03.27Z","channelErrorMessage":"no monitoring permission: numOutstandingMessagesOnChannel is not accurate","lastErrorRecordTimestamp":"2022-01-20T04:44:08.461Z","lastPulledFromChannelTimestamp":"2022-01-20T04:39:58.494Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    executionState の値とエラーメッセージは、ストレージの場所(つまり、Amazon S3またはGoogle Cloud StorageバケットまたはMicrosoft Azureコンテナー)で、ストレージの場所のデータファイルにアクセスするための最小限の権限が、Snowflakeに付与されていないことを示します。

  • パイプ定義の COPY INTO <テーブル> ステートメントをコンパイル中にエラーが発生:

    {"executionState":"STALLED_COMPILATION_ERROR","pendingFileCount":0,"error":"SQL compilation error: error line 1 at position 29\ninvalid identifier 'LAST_NAME'",", "lastPipeErrorTimestamp":"2022-01-20T17:54:30.4Z", "lastIngestedTimestamp":"2022-01-20T17:51:04.73Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T17:51:03.336Z","lastForwardedMessageTimestamp":"2022-01-20T17:51:05.081Z","lastPulledFromChannelTimestamp":"2022-01-20T18:03:00.637Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    executionState 値とエラーメッセージは、Snowpipeがパイプ定義で COPY INTO <テーブル> ステートメントを実行して、ストレージの場所から取得したデータファイルをロードできなかったことを示しています。

SQL の変更 --- 使用状況ビューおよびInformation Schema

FUNCTIONS ビュー: 新しい列

ACCOUNT_USAGE.FUNCTIONS ビューに次の列が追加され、 INFORMATION_SCHEMA.FUNCTIONS ビューとの整合性を保つようになりました。

  • handler

  • imports

  • target_path

この変更の影響を限定するために、新しい列が最後の列としてビューに追加されています。

FUNCTIONS ビュー、 DESCRIBE FUNCTION、および GET_DDL 関数: 新しい列

次の列が INFORMATION_SCHEMA.FUNCTIONS ビューに追加され、 DESCRIBE FUNCTION コマンドと GET_DDL 関数の出力も追加されました。

  • request_translator: リクエストトランスレーターの JavaScript ユーザー定義関数の名前(存在する場合)。

  • response_translator: 応答トランスレーター の JavaScript ユーザー定義関数の名前(存在する場合)。

​​​​​リクエストトランスレーターと応答トランスレーターにより、外部関数が使用するリモートサービスとの間で送受信されるデータの形式を変更できます。詳細については、 リモートサービスに対するデータのあるリクエストトランスレーターおよび応答トランスレーターの使用 をご参照ください。

POLICY_REFERENCES テーブル関数: 新しい列

created_on 列は、 INFORMATION_SCHEMA.POLICY_REFERENCES テーブル関数の出力から削除されました。

INFORMATION_SCHEMA.POLICY_REFERENCES テーブル関数の出力に次の列が追加されました。

  • tag_name

  • tag_database

  • tag_schema

  • policy_status

これらの新しい列を使用して、タグ名による列のポリシーの関連付けを検出できます。

この変更の影響を限定するために、これらの新しい列は出力の最後の列として追加されています。

TAGS ビュー: 新しい列

次の列が ACCOUNT_USAGE.TAGS ビューに追加されています。

  • allowed_values: タグをオブジェクトに割り当てるときに設定できる文字列値を指定。タグに allowed_values が指定されていない場合、列の値は NULL です。

この変更の影響を制限するために、この新しい列はビューの最後の列として追加されています。

TASK_HISTORY 関数: デフォルトで過去7日間に返されるタスク使用履歴

INFORMATION_SCHEMA TASK_HISTORY テーブル関数の動作が次のように変更されました。

以前

デフォルトでは、関数は履歴タスクの記録を返し、開始日時が決定されていない時間範囲内で実行されます。内部データのクリーンアップアクティビティのため、時間範囲は通常、過去14日に制限されていました。ただし、まれに、過去に期間がさらに延長される場合があります。

クエリで SCHEDULED_TIME_RANGE_START 引数が指定された場合、時間範囲は過去7日以下の履歴記録に制限されていました。

現在

この関数は、過去7日以内に開始された履歴タスク実行の記録を返します。

以前の動作と同様に、クエリで SCHEDULED_TIME_RANGE_START 引数が指定されている場合、時間範囲は引き続き過去7日以内の履歴記録に制限されることに注意してください。

TASK_HISTORY ビュー/関数: 新しい列

ACCOUNT_USAGE.TASK_HISTORY ビューと INFORMATION_SCHEMA.TASK_HISTORY テーブル関数の出力に次の列が追加されました。

  • scheduled_from: タスクの実行を促したメカニズムを指定。列に返される値は SCHEDULE のみです。この値は、タスク実行がタスク定義のスケジュールによって開始されたことを示します。タスクツリーで子タスクを実行する場合、列は SCHEDULE も返します。

この列は、将来の機能をサポートするために導入されました。

ウェアハウスビュー: ウェアハウス名の一貫した出力

ウェアハウスの所有者(つまり、ウェアハウスに対する OWNERSHIP 権限を持つロール)またはそれ以上のロールは、新しいウェブインターフェイスまたは ALTER WAREHOUSE...RENAME コマンドを使用してウェアハウスの名前を変更できます。

ウェアハウスの名前が変更されたときの動作が次のように変更されました。

以前

ウェアハウス名が次のビュー列に一貫して表示されていませんでした。

  • ACCOUNT_USAGE、 READER_ACCOUNT_USAGE、および ORGANIZATION_USAGE

    • WAREHOUSE_METERING_HISTORY.WAREHOUSE_HAME

  • ACCOUNT_USAGE

    • METERING_HISTORY.NAME

ビューの最近の記録(ウェアハウス名が変更される前の2~3時間)に新しい名前が表示されました。ただし、古い記録には古い名前が表示されていました。

現在

これらのビューの WAREHOUSE_NAME 列と NAME 列では、すべての記録に対して新しいウェアハウス名が表示されます。

注釈

この動作の変更は、 WAREHOUSE_NAME 列にあるすべての記録の新しいウェアハウス名をすでに表示している、次のビューおよびテーブル関数には影響しません。

  • ACCOUNT_USAGE

    • WAREHOUSE_EVENTS_HISTORY ビュー

    • WAREHOUSE_LOAD_HISTORY ビュー

  • INFORMATION_SCHEMA

    • WAREHOUSE_LOAD_HISTORY テーブル関数

    • WAREHOUSE_METERING_HISTORY テーブル関数

拡張性の変更

JavaScript ストアドプロシージャ: エラー処理の変更

JavaScript で記述されたストアドプロシージャのエラー処理は次のように変更されました。

以前

JavaScript ストアドプロシージャによってスローされたすべてのエラーには、同じエラーコードと SQLSTATE (それぞれ 100183P0000)、および同じ一般的なエラーメッセージ("Execution error in stored procedure SP_NAME...")がありました。

スタックトレースにアクセスするためのプロパティの名前は stackTraceTxt でした。

たとえば、データベースオブジェクトが存在しない場合、例外オブジェクトには次のものが含まれます。

{
  "stackTraceTxt":"At Statement.execute, line 12 position 19",
  "state":"P0000",
  "code":100183,
  "message":"SQL compilation error:\nObject 'X' does not exist or not authorized."
}
Copy

ストアドプロシージャが例外をキャッチしなかった場合にストアドプロシージャを呼び出すと、次の出力が生成されました。

100183 (P0000): Execution error in store procedure ...:
SQL compilation error:
Object 'X' does not exist or not authorized.
At Statement.execute, line 12 position 19
Copy
現在

ストアドプロシージャがクエリを実行し(ほとんどのストアドプロシージャが実行するように)、子クエリの実行中にエラーが発生した場合は、エラーコードと子クエリの SQLSTATE が使用されます。

さらに、スタックトレースにアクセスするためのプロパティの名前が stack に変更されました。 stackTraceTxt プロパティは、動作の変更を有効にしても引き続き存在しますが、 stackTraceTxt は将来のリリースで削除される予定です。

たとえば、データベースオブジェクトが存在しない場合、例外オブジェクトには次のものが含まれます。

{
  "stack":"Statement.execute, line 12 position 19",
  "stackTraceTxt":"Statement.execute, line 12 position 19", // To be removed in a future release
  "state":"42S02",
  "code":2003,
  "message":"SQL compilation error:\nObject 'X' does not exist or not authorized."
}
Copy

ストアドプロシージャが例外をキャッチしない場合にストアドプロシージャを呼び出すと、次の出力が生成されます。

002003 (42S02): Execution error in store procedure ...:
SQL compilation error:
Object 'X' does not exist or not authorized.
At Statement.execute, line 12 position 19
Copy