CREATE ICEBERG TABLE (Iceberg REST カタログ)

現行/指定スキーマで、Iceberg REST カタログ用の Apache Iceberg™ テーブル を作成または置換します。

このコマンドは以下のシナリオで使用します。

注釈

テーブルを作成する前に、Icebergメタデータとデータファイルを格納する 外部ボリューム を作成する必要があります。手順については、 外部ボリュームの構成 をご参照ください。

また、テーブルのカタログ統合も必要です。詳細については、 Apache Iceberg™ REST カタログのカタログ統合を構成する または Snowflake Open Catalog のカタログ統合を設定する をご参照ください。

こちらもご参照ください。

ALTER ICEBERG TABLEDROP ICEBERG TABLESHOW ICEBERG TABLESDESCRIBE ICEBERG TABLEUNDROP ICEBERG TABLE

構文

CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
  [ EXTERNAL_VOLUME = '<external_volume_name>' ]
  [ CATALOG = '<catalog_integration_name>' ]
  CATALOG_TABLE_NAME = '<rest_catalog_table_name>'
  [ CATALOG_NAMESPACE = '<catalog_namespace>' ]
  [ PATH_LAYOUT = { FLAT | HIERARCHICAL } ]
  [ TARGET_FILE_SIZE = '{ AUTO | 16MB | 32MB | 64MB | 128MB }' ]
  [ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
  [ AUTO_REFRESH = { TRUE | FALSE } ]
  [ COMMENT = '<string_literal>' ]
  [ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
  [ ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE } ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
Copy

条件:

partitionExpression ::=
  <col_name> -- identity transform
  | BUCKET ( <num_buckets> , <col_name> )
  | TRUNCATE ( <width> , <col_name> )
  | YEAR ( <col_name> )
  | MONTH ( <col_name> )
  | DAY ( <col_name> )
  | HOUR ( <col_name> )
Copy

バリアント構文

CREATE ICEBERG TABLE(カタログリンクデータベース)

CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
  [
    --Column definition
    <col_name> <col_type> [ DEFAULT <col_default> ]
      [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]

    -- Additional column definitions
    [ , <col_name> <col_type> [ DEFAULT <col_default> ] [ ... ] ]
  ]
  [ PARTITION BY ( partitionExpression [ , partitionExpression , ... ] ) ]
  [ PATH_LAYOUT = { FLAT | HIERARCHICAL } ]
  [ TARGET_FILE_SIZE = '{ AUTO | 16MB | 32MB | 64MB | 128MB }' ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ AUTO_REFRESH = { TRUE | FALSE } ]
  [ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  [ ICEBERG_VERSION = <integer> ]
  [ ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE } ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ BASE_LOCATION = '<path_to_directory_for_table_files>' ]
  [ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
Copy

条件:

partitionExpression ::=
  <col_name> -- identity transform
  | BUCKET ( <num_buckets> , <col_name> )
  | TRUNCATE ( <width> , <col_name> )
  | YEAR ( <col_name> )
  | MONTH ( <col_name> )
  | DAY ( <col_name> )
  | HOUR ( <col_name> )
Copy

CREATE ICEBERG TABLE(カタログリンクデータベース)... AS SELECT

CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ]
  [ ... ]
  AS SELECT <query>
Copy

マスキングポリシーを CTAS ステートメントの列に適用できます。列のデータ型の後にマスキングポリシーを指定します。例:

CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> ( <col1> <data_type> [ WITH ] MASKING POLICY <policy_name> [ , ... ] )
  [ ... ]
  AS SELECT <query>
Copy

必須パラメーター

table_name

Snowflakeのテーブルの識別子(名前)を指定します。テーブルが作成されるスキーマに対して一意である必要があります。

また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例: "My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

詳細については、 識別子の要件 をご参照ください。

注釈

リモート・カタログのテーブルまたは名前空間のリストを取得するには、以下の関数を使用します。

CATALOG_TABLE_NAME = 'rest_catalog_table_name'

外部カタログで認識されるテーブル名を指定します。このパラメーターはテーブル作成後に変更することはできません。

注釈

テーブル名(mynamespace.mytable)で名前空間を指定しないでください。このテーブルに名前空間を指定し、カタログ統合で設定されたデフォルトの名前空間をオーバーライドするには、 CATALOG_NAMESPACE パラメーターを使用します。

col_name

:doc:`カタログリンクデータベース(プレビュー)</user-guide/tables-iceberg-catalog-linked-database> ` のテーブルを作成する場合。

列の識別子(名前)を指定します。テーブル識別子のすべての要件は、列識別子にも適用されます。

詳細については、 識別子の要件 および 予約および制限されたキーワード をご参照ください。

注釈

標準の予約キーワードに加えて、次のキーワードは ANSI 標準コンテキスト関数用に予約されているため、列識別子として使用できません。

  • CURRENT_DATE

  • CURRENT_ROLE

  • CURRENT_TIME

  • CURRENT_TIMESTAMP

  • CURRENT_USER

予約済みキーワードのリストについては、 予約および制限されたキーワード をご参照ください。

col_type

:doc:`カタログリンクデータベース(プレビュー)</user-guide/tables-iceberg-catalog-linked-database> ` のテーブルを作成する場合。

列のデータ型を指定します。

テーブル列に指定できるデータ型の情報については、 Apache Iceberg™ テーブルのデータ型 をご参照ください。

オプションのパラメーター

col_name col_type DEFAULT col_default

Iceberg v3に準拠したテーブルの場合、指定された列の初期デフォルトと書き込みデフォルトの両方を指定します。列のデータ型が文字列の場合は、デフォルト値を一重引用符で囲む必要があります。

重要

列にデフォルト値を指定する場合は、静的な値を指定する必要があります。値に式や関数を指定することはできません。この要件は、Iceberg v3仕様に準拠しており、初期デフォルトと書き込みデフォルトの両方に適用されます。

デフォルト値はIceberg v3の機能であるため、Iceberg v2に準拠したテーブルのデフォルト値を指定することはできません。Icebergテーブルでのデフォルト値の使用について詳しくは、:ref:`label-tables_iceberg_default_values`を参照してください。

注釈

テーブル作成後に列の書き込みデフォルトを変更するには、次を実行します。ALTER ICEBERG TABLE ... ALTER COLUMN ... SET WRITE DEFAULT

PARTITION BY = ( partitionExpression [ , partitionExpression , ... ] )

1つ以上の パーティション式 を指定します。

PATH_LAYOUT = { FLAT | HIERARCHICAL }

SnowflakeがParquetデータファイルをテーブルに書き込むときに使用するパスレイアウトを指定します。

  • FLAT:Snowflakeは、テーブルの``data/``ディレクトリの下にすべてのParquetデータファイルを書き込みます。

  • HIERARCHICAL:Snowflakeは、階層パスレイアウトを使用して、テーブルの``data/``ディレクトリの下にパーティション化されたデータを書き込みます。このレイアウトでは、各パーティション列はパス内のディレクトリレベルとして表されます。これらのパーティション列を定義するには、PARTITION BYパラメーターを使用します。このレイアウトは、「Hiveスタイル」パーティション分割とも呼ばれます。

    PARTITION BY句なしでPATH_LAYOUT = HIERARCHICALを指定した場合、Snowflakeはフラットレイアウトパスを使用してParquetデータファイルを保存します。既存のテーブルのパスレイアウトは変更できないため、現在は階層パスによるパーティション分割を使用しないものの将来的に使用する可能性がある場合は、PARTITION BY句を指定せずにこのパラメーターをHIERARCHICALに設定します。

注釈

標準のSnowflakeデータベースに作成した外部管理テーブルの場合、Snowflakeはリモートカタログで指定されたパーティション分割スキームを推測し、そのスキームをそのまま適用します。

デフォルト: FLAT

MASKING POLICY = policy_name

:doc:`カタログリンクデータベース(プレビュー)</user-guide/tables-iceberg-catalog-linked-database> ` のテーブルを作成する場合。

列に設定する マスキングポリシー を指定します。マスキングポリシーは、標準のSnowflakeデータベース(カタログリンクデータベースではない)に属している必要があります。

EXTERNAL_VOLUME = 'external_volume_name'

IcebergテーブルがメタデータファイルとデータをParquet形式で保存する外部ボリュームの識別子(名前)を指定します。Icebergのメタデータとマニフェストファイルには、テーブルスキーマ、パーティション、スナップショット、その他のメタデータが格納されています。

このパラメーターを指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントの外部ボリュームになります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。

CATALOG = 'catalog_integration_name'

このテーブルのカタログ統合の識別子(名前)を指定します。

このパラメーターを指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントの外部ボリュームになります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。

CATALOG_NAMESPACE = 'catalog_namespace'
  • オプションで、 REST カタログソースの名前空間(my_database など)を指定します。カタログ統合で名前空間を指定し、その後テーブルレベルで指定することにより、1つの REST カタログ統合を使用して、異なるデータベース間でIcebergテーブルを作成できます。テーブルで名前空間を指定しない場合、テーブルはカタログ統合に関連付けられたデフォルトのカタログ名前空間を使用します。

  • カタログ統合でデフォルトの名前空間が指定されていない場合は、 REST カタログソースの名前空間を指定して、テーブルにカタログ名前空間を設定する必要があります。

注釈

リモート・カタログのテーブルまたは名前空間のリストを取得するには、以下の関数を使用します。

TARGET_FILE_SIZE = '{ AUTO | 16MB | 32MB | 64MB | 128MB }'

テーブルのターゲットParquetファイルサイズを指定します。

  • :code:`'{ 16MB | 32MB | 64MB | 128MB }'`では、テーブルのターゲットファイルサイズを固定して指定します。

  • 'AUTO' は、テーブルタイプに応じて動作が異なります。

    • Snowflake 管理テーブル: AUTO は、サイズ、DML パターン、取り込みワークロード、クラスタリング構成などのテーブル特性に基づいて、Snowflakeがテーブルのファイルサイズを選択することを指定します。Snowflakeは、Snowflakeでの読み取りと書き込みパフォーマンスを向上させるために、ファイルサイズを16 MB を起点として自動的に調整します。このオプションを使用して、Snowflakeでテーブルのパフォーマンスを最適化します。

    • 外部管理テーブル: AUTO は、Snowflakeが最大のファイルサイズ(128MB)に積極的にスケーリングすることを指定します。

詳細については、 ターゲットファイルサイズの設定 をご参照ください。

デフォルト: AUTO

MAX_DATA_EXTENSION_TIME_IN_DAYS = integer

Snowflakeがテーブルのデータ保持期間を延長してテーブル上のストリームが古くなるのを防ぐことができる最大日数を指定するオブジェクトパラメーター。

このパラメーターの詳細については、 MAX_DATA_EXTENSION_TIME_IN_DAYS をご参照ください。

REPLACE_INVALID_CHARACTERS = { TRUE | FALSE }

クエリ結果で、無効な UTF -8文字をUnicode置換文字(�)で置き換えるかどうかを指定します。このパラメーターを設定できるのは、外部Icebergカタログを使用するテーブルのみです。

  • TRUE の場合は、無効な UTF -8文字がUnicode置換文字に置き換えられます。

  • FALSE の場合は、無効な UTF -8 文字は変更されません。Parquetデータファイルで無効な UTF -8 文字が検出された場合、Snowflakeはユーザーエラーメッセージを返します。

指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントのパラメーター値になります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。

デフォルト: FALSE

AUTO_REFRESH = { TRUE | FALSE }

メタデータの更新のために、Snowflake がテーブルに関連付けられた外部 Iceberg カタログを自動的にポーリングするかどうかを指定します。

カタログ統合の REFRESH_INTERVAL_SECONDS パラメータに値が指定されていない場合、Snowflake はデフォルトの更新間隔 30 秒を使用します。

詳細については、 自動更新 をご参照ください。

デフォルト: FALSE

注釈

AUTO_REFRESHを INFER_SCHEMAで使用することはサポートされていません。

COPY GRANTS

次の CREATE TABLE バリアントのいずれかを使用して新しいテーブルが作成されるときに、元のテーブルからのアクセス権限を保持することを指定します。

  • CREATE OR REPLACE TABLE

このパラメーターは、既存のテーブルから新しいテーブルにすべての権限(OWNERSHIP 以外)をコピーします。新しいテーブルは、スキーマ内のオブジェクトタイプに定義された将来の許可を継承 しません 。デフォルトでは、 CREATE TABLE ステートメントを実行するロールが新しいテーブルを所有します。

パラメーターが CREATE ICEBERG TABLE ステートメントに含まれていない場合、新しいテーブルは元のテーブルに付与された明示的なアクセス権限を継承 しません が、スキーマ内のオブジェクトタイプに定義された将来の権限は継承します。

注意:

  • データ共有 の場合、

    • 既存のテーブルが別のアカウントと共有されていた場合、置換テーブルも共有されます。

    • 既存のテーブルがデータコンシューマとしてアカウントと共有され、アクセスがアカウント内の他のロールにさらに許可された場合(親データベースの GRANT IMPORTED PRIVILEGES を使用)、置換テーブルにもアクセスが許可されます。

  • 置換テーブルの SHOW GRANTS 出力には、コピーされた権限の被付与者が、ステートメントが実行されたときの現在のタイムスタンプとともに、 CREATE ICEBERG TABLE ステートメントを実行したロールとしてリストされます。

  • 付与をコピーする操作は、 CREATE ICEBERGTABLE コマンドで(つまり、同じトランザクション内で)アトミックに発生します。

COMMENT = 'string_literal'

テーブルのコメントを指定します。

デフォルト: 値なし

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

タグ の名前とタグ文字列の値を指定します。

タグ値は常に文字列であり、タグ値の最大文字数は256です。

ステートメントでのタグの指定に関する情報については、 タグの割り当て をご参照ください。

BASE_LOCATION = 'path_to_directory_for_table_files'

Snowflakeがテーブルのデータファイルとメタデータファイルの書き込みパスを構築するために使用するディレクトリへのパス。

EXTERNAL_VOLUME を使用する場合、このパスは外部ボリュームに指定するストレージパスに含める必要があり、相対パスを指定するオプションもあります。相対パスを指定した場合は、外部ボリュームの STORAGE_BASE_URL からの相対パスになります。指定がない場合、Snowflakeは BASE_LOCATION_PREFIX パラメーターの値やテーブル名などの属性を使用して書き込みパスを構築します。

供給された認証情報を使用している場合は、絶対パスも指定する必要があります。

注釈

このディレクトリをテーブル作成後に変更することはできません。

ICEBERG_VERSION = integer

テーブルが準拠する|iceberg-tm|仕様のバージョンを指定します。

注意

他のエンジンを使用してテーブルプロパティのIcebergテーブルの形式バージョンをv3にアップグレードする前に、まだv3をサポートしていないエンジンやアプリケーションでテーブルが使用されていないことを確認してください。形式バージョンのダウングレードは、Apache Iceberg仕様ではサポートされていません。したがって、すべてのリーダーとライターはv3をサポートしている必要があります。SnowflakeのIcebergテーブルのデフォルトバージョンはv2です。これは、必要に応じてv3に構成できます。Snowflakeを使用したインプレースバージョンアップグレードの実行は、現時点ではサポートされていません。

このパラメーターを設定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、アカウントのIcebergバージョンになります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。

  • 2:テーブルはIcebergバージョン2に準拠しています。

  • 3:テーブルはIcebergバージョン3に準拠しています。

デフォルト: 2

このパラメーターの詳細については、 ICEBERG_VERSION をご参照ください。

ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE }

テーブルが読み取り時マージ動作を使用するかどうかを指定します。

このパラメーターを設定しない場合、Icebergテーブルのデフォルトは、スキーマ、データベース、アカウントに対して指定された読み取り時マージ動作になります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。

:

TRUE:テーブルは読み取り時マージ動作を使用します。テーブルが|iceberg-tm|テーブル仕様のv2またはv3のどちらに準拠しているかに応じて、動作は以下のリストで説明されているとおりになります。

  • テーブルがv2に準拠している場合、位置削除ファイルを使用します。

  • テーブルがv3に準拠している場合は、削除ベクターを使用します。

FALSE:テーブルは書き込み時コピー動作を使用します。

デフォルト: TRUE

このパラメーターの詳細な説明については、 ENABLE_ICEBERG_MERGE_ON_READ をご参照ください。

WITH CONTACT ( purpose = contact [ , purpose = contact ...] )

新しいオブジェクトを1つ以上の 連絡先 に関連付けます。

AS句を除く他のすべての句の後に、WITHCONTACT句を指定します(その句がこのコマンドでサポートされている場合)。

パーティション式パラメーター(partitionExpression

Snowflakeは、Apache Iceberg仕様のバージョン2のすべてのパーティション変換をサポートしています。詳細については、 パーティション変換 をご参照ください。

Icebergテーブルのパーティション分割の詳細については、Icebergパーティショニング をご参照ください。

col_name

パーティション化するソース列の識別子(名前)を指定します。

YEAR などの変換なしで、単独で使用する場合は、ソース列でのID変換を指定します。詳細については、ID をご参照ください。

BUCKET

バケット変換を指定します。詳細については、バケット変換の詳細 をご参照ください。

num_buckets は、データをグループ化するバケットの数です。

TRUNCATE

指定されたソース列の切り捨て値に基づいてデータをパーティション化する切り捨て変換を指定します。詳細については、変換の詳細を切り捨てる をご参照ください。

YEAR

日付またはタイムスタンプのソース列値から年を抽出する年変換を指定します。詳細については、パーティション変換 をご参照ください。

MONTH

月の変換を指定します。詳細については、パーティション変換 をご参照ください。

DAY

日付またはタイムスタンプのソース列値から日を抽出する日変換を指定します。詳細については、パーティション変換 をご参照ください。

HOUR

タイムスタンプソース列値から時間を抽出する時間変換を指定します。詳細については、パーティション変換 をご参照ください。

アクセス制御の要件

この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。

権限

オブジェクト

注意

CREATE ICEBERG TABLE

スキーマ

CREATE EXTERNAL VOLUME

アカウント

新しい外部ボリュームを作成するために必要です。

USAGE

外部ボリューム

既存の外部ボリュームを参照するために必要です。

CREATE INTEGRATION

アカウント

新しいカタログ統合を作成するために必要です。

USAGE

カタログ統合

既存のカタログ統合を参照するために必要です。

スキーマ内のオブジェクトを操作するには、親データベースの少なくとも1つの権限と、親スキーマの少なくとも1つの権限が必要です。

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。

使用上の注意

  • 二重引用符で囲まれた識別子を使用して外部ボリュームまたはカタログ統合を作成した場合は、 :emph:` ` CREATE ステートメントで作成した識別子と(二重引用符を含めて) ICEBERGまったく同じTABLE 識別子を指定する必要があります。引用符を含めないと、 Object does not exist エラー(または同様のタイプのエラー)が発生する可能性があります。

  • OR REPLACE オプションは非アトミック操作を実行します。この場合は外部Icebergカタログで、 DROP 操作の後に CREATE を実行します。

  • 書き込みサポート付きIcebergテーブル を作成する場合。

    • 標準のSnowflakeデータベースを使用する場合は、先にリモートカタログにIcebergテーブルを作成する必要があります。たとえば、Sparkを使用してIcebergテーブルをOpen Catalogに書き込むことができます。CREATE ICEBERG TABLE ステートメントで列定義を指定します。

    • カタログリンクデータベース を使用する場合、テーブルを作成するときに列定義を指定する必要があります。あるいは、Snowflakeがリモートカタログで自動的に検出するIcebergテーブルに書き込むこともできます。

  • TARGET_FILE_SIZE プロパティは、書き込みサポート(プレビュー) 付きのテーブルでのみサポートされています。

  • テーブルの作成に関する考慮事項:

    • スキーマに同じ名前のテーブルやビューを含めることはできません。テーブルを作成する場合:

      • 同じ名前のビューがスキーマにすでに存在する場合は、エラーが返され、テーブルは作成されません。

      • 同じ名前のテーブルがスキーマに既に存在する場合、オプションの OR REPLACE キーワードがコマンドに含まれていない限り、エラーが返され、テーブルは作成されません。

    • CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。

      これは、 CREATE OR REPLACE ICEBERG TABLE 操作と同時に実行されるクエリが、古いテーブルバージョンまたは新しいテーブルバージョンのいずれかを使用することを意味します。

    • OR REPLACEIF NOT EXISTS 句は互いに排他的です。両方を同じステートメントで使うことはできません。

    • 予約キーワード と同様に、 ANSI 予約関数名(CURRENT_DATECURRENT_TIMESTAMP など)は列名として使用できません。

    • テーブルを再作成すると(オプションの OR REPLACE キーワードを使用)、その履歴が削除され、テーブル上のストリームが古くなります。古いストリームは読み取れません。

  • バリアント構文の使用:

    • CREATE ICEBERG TABLE … LIKE:

    • CREATE ICEBERG TABLE … CLONE:

    • CREATE ICEBERG TABLE(カタログリンクデータベース)... AS SELECT:

      • 現在、リモートカタログとして以下のカタログのいずれかを使用している場合はサポートされていません。

        • AWS Glue

        • Databricks Unityカタログ

        または、 CREATE ICEBERG TABLE (Iceberg REST カタログ) 構文を使用して空のIcebergテーブルを作成し、 INSERT INTO ... SELECT ステートメントを使用して空のテーブルにデータを挿入することもできます。ただし、この代替案では2つの別々のトランザクションを使用しているため、アトミック性は保証されません。

  • デフォルト値の使用:

    • v3 Icebergテーブルのデフォルト値には、CURRENT_TIMESTAMP()などの式や関数は使用できません。Apache Iceberg v3テーブル仕様では定数値のみが許可されています。

      • v2 Icebergテーブルでは、SnowflakeでCURRENT_TIMESTAMP()などの式を使用できます。ただし、このプロパティはIcebergのメタデータに永続化されません。これは、デフォルト値の仕様がバージョン3で導入されたためです。式としてデフォルト値を持つv2 Icebergテーブルの列は、Snowflakeでのみ使用されますが、テーブルは他のエンジンと引き続き相互運用でき、バージョン2の仕様に準拠しています。

    • CREATE ICEBERG TABLE(カタログリンクのデータベース)...でのデフォルト値の使用は、サポートされて*います*。

    • CREATE ICEBERG TABLE(カタログリンクのデータベース)...AS SELECTでのデフォルト値の使用は、サポートされて*いません*。

  • メタデータについて:

    注意

    Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。

リモートのIceberg REST カタログを使用するIcebergテーブルを作成する

CREATE OR REPLACE ICEBERG TABLE my_iceberg_table
  EXTERNAL_VOLUME = 'my_external_volume'
  CATALOG = 'my_rest_catalog_integration'
  CATALOG_TABLE_NAME = 'my_remote_table'
  AUTO_REFRESH = TRUE;
Copy

Snowflake Open Catalog のテーブルをクエリするためにIcebergテーブルを作成する

この例では、 Snowflakeを使用して Snowflake Open Catalog 内のテーブルをクエリする に使用できるIceberg テーブルを作成します。

CREATE ICEBERG TABLE open_catalog_iceberg_table
  EXTERNAL_VOLUME = 'my_external_volume'
  CATALOG = 'open_catalog_int'
  CATALOG_TABLE_NAME = 'my_open_catalog_table'
  AUTO_REFRESH = TRUE;
Copy

カタログリンクデータベースでのIcebergテーブルの作成

次の例では、列定義のある カタログリンクデータベース で書き込み可能なIcebergテーブルを作成します。

USE DATABASE my_catalog_linked_db;

USE SCHEMA 'my_namespace';

CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
  first_name string,
  last_name string,
  amount int,
  create_date date
);
Copy

カタログリンクデータベースにパーティション化されたテーブルを作成する

次の例では、start_date という名前のタイムスタンプ列の値を使用して 外部管理Icebergテーブル を作成し、日ごとにテーブルをパーティション化します。

USE DATABASE my_catalog_linked_db;

USE SCHEMA 'my_namespace';

CREATE OR REPLACE ICEBERG TABLE iceberg_partitioned_date_time (start_date timestamp)
  PARTITION BY (DAY(start_date));
Copy

サポートされているテーブルロード機能を使用して、テーブルにデータを挿入できます。たとえば、INSERTINTO ステートメントを使用して、次のデータを過去に作成した空の iceberg_partitioned_date_time テーブルに挿入します。

INSERT INTO iceberg_partitioned_date_time (start_date)
  VALUES
    (to_timestamp_ntz('2023-01-02 00:00:00')),
    (to_timestamp_ntz('2023-02-03 00:00:00')),
    (to_timestamp_ntz('2023-01-02 01:00:00')),
    (to_timestamp_ntz('2023-02-03 02:00:00'));
Copy

詳細については、 Icebergパーティショニング をご参照ください。

外部管理Iceberg v3テーブルを作成する

次の例では、リモートのIcebergRESTカタログを使用し、|iceberg-tm|仕様のv3に準拠した|iceberg-tm|テーブルを作成します。

注釈

形式バージョンは外部カタログのメタデータですでに定義されており、Snowflakeはメタデータからこのバージョンを取得するため、コマンドで:code:`ICEBERG_VERSION = 3`を指定する必要はありません。

CREATE ICEBERG TABLE my_v3_iceberg_table
  EXTERNAL_VOLUME = 'my_external_volume'
  CATALOG = 'my_rest_catalog_integration'
  CATALOG_TABLE_NAME = 'my_remote_table'
  AUTO_REFRESH = TRUE;
Copy

カタログリンクデータベースでIceberg v3テーブルを作成する

次の例では、列定義を持ち、|iceberg-tm|仕様のv3に準拠した書き込み可能なIcebergテーブルを:doc:`カタログリンクデータベース</user-guide/tables-iceberg-catalog-linked-database>`に作成します。

USE DATABASE my_catalog_linked_db;

USE SCHEMA 'my_namespace';

CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
  first_name string,
  last_name string,
  amount int,
  create_date date
)
  ICEBERG_VERSION = 3;
Copy

カタログリンクデータベースで、階層パスレイアウトを使用してパーティションテーブルを作成する

次の例では、``start_date``という名前のタイムスタンプ列の値を使用してテーブルを日単位でパーティション化し、:doc:`外部管理Icebergテーブル</user-guide/tables-iceberg-externally-managed-writes>`を作成します。PATH_LAYOUT=HIERARCHICALであるため、Snowflakeは、ファイルパスにパーティショニング情報が含まれるファイルの階層パスレイアウトを使用して、パーティショニングされたIcebergテーブルにデータを書き込みます。

USE DATABASE my_catalog_linked_db;

USE SCHEMA 'my_namespace';

CREATE OR REPLACE ICEBERG TABLE iceberg_partitioned_date_time (start_date timestamp)
  PARTITION BY (DAY(start_date))
  PATH_LAYOUT = HIERARCHICAL;
Copy

サポートされているテーブルロード機能を使用して、テーブルにデータを挿入できます。たとえば、INSERTINTO ステートメントを使用して、次のデータを過去に作成した空の iceberg_partitioned_date_time テーブルに挿入します。

INSERT INTO iceberg_partitioned_date_time (start_date)
  VALUES
    (to_timestamp_ntz('2023-01-02 00:00:00')),
    (to_timestamp_ntz('2023-02-03 00:00:00')),
    (to_timestamp_ntz('2023-01-02 01:00:00')),
    (to_timestamp_ntz('2023-02-03 02:00:00'));
Copy

詳細については、 階層パスによるパーティション分割 をご参照ください。