スキーマ:

ACCOUNT_USAGE

ACCESS_HISTORY ビュー

このAccount Usageビューを使用して、過去365日(1年)以内のSnowflakeオブジェクト(例: テーブル、ビュー、列)のアクセス履歴をクエリできます。

このセクションには2つのテーブルがあります。

  • 最初のテーブルは、 ACCESS_HISTORY ビューの列を定義します。

  • 2番目のテーブルは、 BASE_OBJECTS_ACCESSED、 DIRECT_OBJECTS_ACCESSED、および OBJECTS_MODIFIED 列の JSON 配列のフィールドを定義します。

列名

データ型

説明

QUERY_ID

TEXT

SQL ステートメントのための内部、システム生成識別子。この値は QUERY_HISTORY ビュー にも記載されています。

a0fda135-d678-4184-942b-c3411ae8d1ce

QUERY_START_TIME

TIMESTAMP_LTZ

ステートメントの開始時刻(UTC タイムゾーン)。

2022-01-25 16:17:47.388 +0000

USER_NAME

TEXT

クエリを発行したユーザー。

JSMITH

DIRECT_OBJECTS_ACCESSED

ARRAY

テーブル、ビュー、列などのデータオブジェクトの JSON 配列は、クエリで明示的に、またはアスタリスク(つまり *)を使用するなどのショートカットを介して直接指定されます。このフィールドには仮想列を返すことができます。

[
  {
    "columns": [
      {
        "columnId": 68610,
        "columnName": "CONTENT"
      }
    ],
    "objectDomain": "Table",
    "objectId": 66564,
    "objectName": "TEST_DB.TEST_SCHEMA.T1"
  }
]

BASE_OBJECTS_ACCESSED

ARRAY

すべてのベースデータオブジェクトの JSON 配列、具体的には、クエリを実行するためのテーブルの列。

注: データ共有のコンシューマーアカウントで共有ビューにアクセスする場合、このフィールドはビュー名またはビュー列(仮想列を含む)を指定します。

[
  {
    "columns": [
      {
        "columnId": 68610,
        "columnName": "CONTENT"
      }
    ],
    "objectDomain": "Table",
    "objectId": 66564,
    "objectName": "TEST_DB.TEST_SCHEMA.T1"
  }
]

OBJECTS_MODIFIED

ARRAY

クエリの書き込み操作に関連付けられたオブジェクトを指定する JSON 配列。

[
  {
    "objectDomain": "STRING",
    "objectId":  NUMBER,
    "objectName": "STRING",
    "columns": [
      {
        "columnId": "NUMBER",
        "columnName": "STRING",
        "baseSources": [
          {
            "columnName": STRING,
            "objectDomain": "STRING",
            "objectId": NUMBER,
            "objectName": "STRING"
          }
        ],
        "directSources": [
          {
            "columnName": STRING,
            "objectDomain": "STRING",
            "objectId": NUMBER,
            "objectName": "STRING"
          }
        ]
      }
    ]
  },
  ...
]

DIRECT_OBJECTS_ACCESSEDBASE_OBJECTS_ACCESSED、および OBJECTS_MODIFIED 列の JSON 配列のフィールドについて以下で説明します。

フィールド

データ型

説明

columnId

NUMBER

アカウント内で一意の列 ID。この値は、 COLUMNS ビューの columnID と同じです。

columnName

TEXT

アクセスされた列の名前。

objectId

NUMBER

特定のアカウントおよびドメイン内で一意であるオブジェクトの識別子。この番号は一致します。

objectName

TEXT

アクセスされたオブジェクトの完全修飾名。

ステージにアクセスした場合、この値は次のようになります。

  • username (ユーザーステージ)

  • table_name (テーブルステージ)

  • stage_name (名前付きステージ)

objectDomain

TEXT

次のいずれかを使用します。 TableViewMaterialized viewExternal tableStream または Stage

位置

TEXT

データアクセスが外部ロケーション(例: s3://mybucket/a.csv)の場合における外部ロケーションの URL。 . クエリがステージにアクセスしない場合、このフィールドは省略されます。

stageKind

TEXT

ステージに書き込むときは、次のいずれかです。 Table | User | Internal Named | External Named

クエリがステージにアクセスしない場合、このフィールドは省略されます。

baseSources

TEXT

directSources で指定された列のソース列として機能する列。これらの列により、列系統を支援します。

directSources

TEXT

データが書き込まれるターゲットテーブルのソース列として機能する、 SQL ステートメントのデータ 書き込み 部分で特に言及されている列。これらの列により、列系統を支援します。

使用上の注意

一般的なメモ
  • ビューには、2021年2月22日から始まるデータが表示されます。

  • パフォーマンスを向上させるには、 QUERY_START_TIME 列でクエリをフィルターし、より狭い時間範囲を選択します。サンプルクエリについては、 ACCESS_HISTORY ビューのクエリ をご参照ください。

  • セキュアビュー。ログ記録には、ビューを生成するための基になるベーステーブル(つまり、 BASE_OBJECTS_ACCESSED)が含まれています。例には、他のアカウントAccount Usageビューに対するクエリや、抽出、変換、およびロード(つまり、 ETL)操作のためのベーステーブルに対するクエリが含まれます。

読み取りクエリのメモ

このビューは、次の型の 読み取り クエリをサポートします。

  • SELECT、CREATE TABLE ... AS SELECT (つまり、 CTAS)を含む。

    • Snowflakeは、 CTAS 操作で SELECT サブクエリを記録します。

  • CREATE TABLE ... CLONE

    • Snowflakeは、 CLONE 操作でソーステーブルを記録します。

  • COPY INTO ... TABLE

    • Snowflakeは、テーブルが FROM 句でソースとして指定されている場合に 限り、このクエリをログに記録します。

  • DML データを読み取る操作(例: SELECT サブクエリを含み、 WHERE または JOIN の特定の列を指定): INSERT ... SELECT、 UPDATE、 DELETE、および MERGE。

  • 関数内のクエリにテーブルが含まれている場合は、 ユーザー定義関数 (つまり、UDFs)と 表形式 SQL UDFs (UDTFs)。これは BASE_OBJECTS_ACCESSED フィールドでログに記録されます。

    UDFs の詳細については、 UDF のメモ (このトピック内)をご参照ください。

書き込み操作のメモ

このビューは、次の型の 書き込み 操作をサポートします。

  • GET <内部ステージ>

  • PUT <内部ステージ>

  • DELETE

  • TRUNCATE

  • INSERT

    • INSERT INTO ... FROM SELECT *

    • INSERT INTO TABLE ... VALUES ()

  • MERGE INTO ... FROM SELECT *

  • UPDATE

    • UPDATE TABLE ... FROM SELECT * FROM ...

    • UPDATE TABLE ... WHERE ...

  • データのロードステートメント:

    • COPY INTO TABLE FROM internalStage

    • COPY INTO TABLE FROM externalStage

    • COPY INTO TABLE FROM externalLocation

  • データのアンロードステートメント:

    • COPY INTO internalStage FROM TABLE

    • COPY INTO externalStage FROM TABLE

    • COPY INTO externalLocation FROM TABLE

  • CREATE:

    • CREATE DATABASE ... CLONE

    • CREATE SCHEMA ... CLONE

    • CREATE TABLE ... CLONE

    • CREATE TABLE ... AS SELECT

  • CASE 関数を呼び出してアクセスする列を決定する書き込み操作(SELECT クエリで CASE 関数を使用した CTAS ステートメントなど)では、 CTAS ステートメントの記述方法に応じて、すべての CASE 分岐で参照されるすべての列が、BASE_OBJECTS_ACCESSED 列、DIRECT_OBJECTS_ACCESSED 列、または両方の列で記録されます。

データ共有のメモ

データ共有のプロバイダーアカウントが、共有を介してデータ共有のコンシューマーアカウントにオブジェクトを共有する場合、

  • プロバイダーアカウント: プロバイダーアカウントで実行された共有オブジェクトに対するクエリとログは、データ共有のコンシューマーアカウントには表示されません。

  • コンシューマーアカウント: コンシューマーアカウントで実行されたデータ共有に対するクエリは、ログに記録されてコンシューマーアカウントにのみ表示され、データ共有のプロバイダーアカウントには表示されません。

    たとえば、プロバイダーがテーブルとテーブルから構築されたビューをコンシューマーアカウントに共有し、共有ビューにクエリがある場合、Snowflakeは BASE_OBJECTS_ACCESSED 列に共有ビューアクセスを記録します。 columnNameobjectName の値を含むこの記録により、コンシューマーは自分のアカウントでアクセスされたオブジェクトを知ることができます。また、基になるテーブル(objectIdcolumnId を介して)はコンシューマーに公開されないため、プロバイダーも保護されます。

  • 列系統では、

    データ共有プロバイダーが、データ共有コンシューマーにビューを利用できるようにする場合、ビューのソース列はデータ共有プロバイダーに由来するため、コンシューマーには表示されません。

    データ共有コンシューマーがデータを共有ビューからテーブルに移動する場合、Snowflakeは新しく作成されたテーブルのビュー列を baseSources として記録しません。

UDFs およびストアドプロシージャのメモ

この 更新 は延期されており、将来のリリースで利用できるようになります。

Snowflakeは、ローカルの ACCESS_HISTORY ビューに UDFs およびストアドプロシージャへの参照がすでに含まれている行を保持します。

サポート対象外
  • このビューは、次のタイプのアクセスをログに記録 しません

  • さらに、このビューは次をサポートして いません

    • 新しい値の生成などの、 シーケンス

    • 外部関数の使用中にSnowflakeに出入りするデータ。

    • ベーステーブルと直接オブジェクトの間でアクセスされる中間ビュー。

      たとえば、次のオブジェクト構造を持つView_Aのクエリについて考えてみます。View_A » View_B » View_C » Base_Table。

      ACCESS_HISTORY ビューは、View_AとBase_Tableにクエリを記録しますが、View_BとView_Cには記録 しません

    • ビュー、マテリアライズドビュー、およびストリームに読み込むための操作。

    • 複製に起因するデータの移動。

使用上の注意: 列系統

これらの追加の注意事項は、列系統に関連しています。

サポートされている操作

列系統は、次の SQL 操作の詳細を追跡します。

クエリ条件
  • クエリプロファイル/プラン

    Snowflakeが書き込むクエリプランは、 ACCESS_HISTORY ビューが列系統を記録するかどうかを決定します。クエリプランの一部として列を評価する必要がある場合、クエリプランの最終結果として列が最終結果に含まれていない場合でも、Snowflakeは ACCESS_HISTORY ビューに列を記録します。

    たとえば、特定の列値に対する WHERE 句を含む次の INSERT ステートメントについて考えます。

    insert into a(c1)
    select c2
    from b
    where c3 > 1;
    

    WHERE 句が FALSE と評価された場合でも、Snowflake は c2 列を c1 列のソース列として記録します。 c3 列は、 baseSources または directSources のソース列としてリストされません。

  • マスクされた列:

    • マスクされた列は常に directSources フィールドにリストされます。

    • baseSources フィールドの記録は、ポリシー定義によって異なります。例:

      • マスキングポリシー条件で CASE 関数を使用する場合は、各 CASE ブランチで参照されるすべての列が baseSources フィールドに記録されます。

      • マスキングポリシー条件が定数値(例: *****)のみを指定する場合、 baseSources フィールドは空です。

  • UDFs:

    • 列を引数として UDF に渡し、結果を別の列に書き込む場合、引数として渡された列は directSources フィールドに記録されます。例:

      insert into A(col1) select f(col2) from B;
      

      この例では、列が f という名前の UDF の引数であるため、Snowflakeは directSources フィールドに col2 を記録します。

    • baseSources フィールドの記録は、 UDF 定義に依存します。

ビュー列

ビュー列はソース列とは見なされず、ビュー列のデータがテーブル列にコピーされる場合は baseSources フィールドにリストされません。この場合のビュー列は directSources フィールドにリストされます。

EXISTS サブクエリ

EXISTS サブクエリ句で参照される列は、ソース列とは見なされません。

最上部に戻る