Iceberg Connector¶
概要¶
Icebergコネクタを使用すると、Icebergテーブルに格納されたデータをクエリできます。
メタストア¶
Icebergテーブルは、ファイルシステム上のデータとともに、ほとんどのメタデータをメタデータファイルに格納しますが、テーブルの現在のメタデータポインタの現在の場所を見つけるための中央の場所が必要です。この中央の場所をIceberg Catalog
と呼びます。Presto Icebergコネクタは、HIVE
、NESSIE
、REST
、HADOOP
などのさまざまなタイプのIceberg Catalogをサポートしています。
Icebergコネクタを設定するには、カタログプロパティファイルetc/catalog/iceberg.properties
を作成します。カタログタイプを定義するには、iceberg.catalog.type
プロパティを、次の内容とともに指定する必要があります。プロパティ値は次のように置き換えます。
Hiveメタストアカタログ¶
Icebergコネクタは、Hiveコネクタと同じHMSの設定をサポートしています。
connector.name=iceberg
hive.metastore.uri=hostname:port
iceberg.catalog.type=hive
Glueカタログ¶
Icebergコネクタは、Hiveコネクタと同じGlueの設定をサポートしています。
connector.name=iceberg
hive.metastore=glue
iceberg.catalog.type=hive
HiveまたはGlueカタログで構成されたIcebergコネクタを使用する場合、追加の構成を利用できます。
プロパティ名 |
説明 |
デフォルト |
---|---|---|
|
Thriftプロトコルを使用して接続するHiveメタストアのURI。複数のURIが指定されている場合、最初のURIがデフォルトで使用され、残りのURIはフォールバックメタストアになります。 例: このプロパティは、 |
|
|
Hive MetastoreからIcebergテーブルの統計を上書きするために使用する統計のカンマ区切りリスト。使用可能な値は、 注: IcebergコネクタがHiveで構成されている場合にのみ有効です。 |
|
|
テーブルメタデータを更新するときに、再試行間でスリープする最小時間。 |
100ms |
|
テーブルメタデータを更新するときに、再試行間でスリープする最大時間。 |
5秒 |
|
テーブルメタデータのリフレッシュ操作が失敗する前に、すべての再試行にわたってかかる最大時間。 |
1分 |
|
Hiveメタストアを使用してテーブルメタデータを更新する際のエラー後の再試行回数。 |
20 |
|
再試行間の後続の待ち時間を調整するために使用される倍数。 |
4.0 |
Nessieカタログ¶
Nessieカタログを使用するには、カタログタイプをiceberg.catalog.type=nessie
として構成します。
connector.name=iceberg
iceberg.catalog.type=nessie
iceberg.catalog.warehouse=/tmp
iceberg.nessie.uri=https://localhost:19120/api/v1
Nessieカタログでサポートされる追加のプロパティ
プロパティ名 |
説明 |
---|---|
|
Nessieに使用するブランチ/タグ。デフォルトは |
|
Nessie APIエンドポイントURI(必須)。例: |
|
使用する認証タイプ。使用可能な値は 注: Nessie BASIC認証タイプは非推奨になりました。これは今後のリリースで削除されます |
|
|
|
|
|
|
|
Nessieサーバーへのリクエストの読み取りタイムアウト(ミリ秒単位)。例: |
|
Nessieサーバーへの接続リクエストの接続タイムアウト(ミリ秒単位)。例: |
|
Nessieサーバーへのリクエストで圧縮を有効にするかどうか。デフォルトは |
|
使用するカスタムClientBuilder実装クラスの構成。 |
DockerでのNessieの設定¶
Dockerイメージを使用してローカルでNessieインスタンスを設定するには、Nessieの設定を参照してください。Dockerインスタンスが起動して実行されると、次の例のようなログが表示されるはずです。
2023-09-05 13:11:37,905 INFO [io.quarkus] (main) nessie-quarkus 0.69.0 on JVM (powered by Quarkus 3.2.4.Final) started in 1.921s. Listening on: http://0.0.0.0:19120
2023-09-05 13:11:37,906 INFO [io.quarkus] (main) Profile prod activated.
2023-09-05 13:11:37,906 INFO [io.quarkus] (main) Installed features: [agroal, amazon-dynamodb, cassandra-client, cdi, google-cloud-bigtable, hibernate-validator, jdbc-postgresql, logging-sentry, micrometer, mongodb-client, narayana-jta, oidc, opentelemetry, reactive-routes, resteasy, resteasy-jackson, security, security-properties-file, smallrye-context-propagation, smallrye-health, smallrye-openapi, swagger-ui, vertx]
NessieのOpenTelemetryコレクターに関連するログメッセージが以下の例のように表示される場合、構成オプション quarkus.otel.sdk.disabled=true
を使用してOpenTelemetryを無効にできます。
2023-08-27 11:10:02,492 INFO [io.qua.htt.access-log] (executor-thread-1) 172.17.0.1 - - [27/Aug/2023:11:10:02 +0000] "GET /api/v1/config HTTP/1.1" 200 62
2023-08-27 11:10:05,007 SEVERE [io.ope.exp.int.grp.OkHttpGrpcExporter] (OkHttp http://localhost:4317/...) Failed to export spans. The request could not be executed. Full error message: Failed to connect to localhost/127.0.0.1:4317
たとえば、次のコマンドを使用してDockerイメージを起動します。 docker run -p 19120:19120 -e QUARKUS_OTEL_SDK_DISABLED=true ghcr.io/projectnessie/nessie
この構成オプションおよびその他の関連オプションの詳細については、OpenTelemetry構成リファレンスを参照してください。
OpenTelemetryトレースのトラブルシューティングの詳細については、トレースのトラブルシューティングを参照してください。
次の例のようなエラーが表示される場合、これはおそらくhttpsサーバーではなくhttpサーバーと対話しているためです。 iceberg.nessie.uri
を http://localhost:19120/api/v1
に設定する必要があります。
Caused by: javax.net.ssl.SSLException: Unsupported or unrecognized SSL message
at sun.security.ssl.SSLSocketInputRecord.handleUnknownRecord(SSLSocketInputRecord.java:448)
at sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:174)
at sun.security.ssl.SSLTransport.decode(SSLTransport.java:111)
at sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1320)
at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1233)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:417)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:389)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:558)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:201)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:167)
at org.projectnessie.client.http.impl.jdk8.UrlConnectionRequest.executeRequest(UrlConnectionRequest.java:71)
... 42 more
RESTカタログ¶
RESTカタログを使用するには、カタログタイプを iceberg.catalog.type=rest
として構成します。最小限の構成には以下が含まれます。
connector.name=iceberg
iceberg.catalog.type=rest
iceberg.rest.uri=https://localhost:8181
RESTカタログでサポートされている追加のプロパティ
プロパティ名 |
説明 |
---|---|
|
REST APIエンドポイントURI(必須)。例: |
|
使用する認証タイプ。利用可能な値は、 |
|
OAUTH2認証に使用するクレデンシャル。例: |
|
OAUTH2認証に使用するベアラートークン。例: |
|
RESTカタログと通信するときに使用するセッションタイプ。利用可能な値は、 |
|
Icebergテーブルのカタログウェアハウスルートパス(オプション)。例: |
Hadoopカタログ¶
Hadoopカタログを使用するには、カタログタイプを iceberg.catalog.type=hadoop
として構成します。最小限の構成には以下が含まれます。
connector.name=iceberg
iceberg.catalog.type=hadoop
iceberg.catalog.warehouse=hdfs://hostname:port
Hadoopカタログ構成プロパティ
プロパティ名 |
説明 |
デフォルト |
---|---|---|
|
Icebergテーブルのカタログウェアハウスルートパス。 例: |
|
|
キャッシュするIcebergカタログの数。 |
|
構成プロパティ¶
注
Icebergコネクターは、HiveコネクターとしてのAmazon S3の構成オプションをサポートしています。
以下の構成プロパティは、すべてのカタログタイプで利用できます。
プロパティ名 |
説明 |
デフォルト |
---|---|---|
|
Icebergテーブルのカタログタイプ。利用可能な値は、 |
|
|
Hadoop構成リソースのパス。 例: |
|
|
Icebergテーブルのストレージファイル形式。利用可能な値は、 |
|
|
ファイルの書き込み時に使用する圧縮コーデック。利用可能な値は、 |
|
|
ライターごとに処理される最大パーティション数。 |
|
|
各スプリットに割り当てられる重みの最小値として、範囲(0、1]の10進数値が使用されます。低い値は、小さなファイルを含むテーブルのパフォーマンスを向上させる可能性があります。高い値は、高度に歪んだ集計または結合を含むクエリのパフォーマンスを向上させる可能性があります。 |
|
|
更新にmerge-on-readを使用するベーステーブルの読み取りを有効にします。 |
|
|
有効にすると、等価削除行フィルタリングが等価削除ファイルのデータとの結合として適用されます。 |
|
|
Parquet逆参照プッシュダウンを有効にします。 |
|
|
統計を選択するときに、最も近いスナップショットを計算する際に、レコード総数の差が重要となる量。値1は、1つのレコードが時間差の1ミリ秒に相当することを意味します。 |
|
|
実験的:Icebergのフィルタープッシュダウンを有効にします。これはNative Workerでのみサポートされています。 |
|
|
Icebergテーブルの、メタデータを使用してそのテーブルのクエリを最適化できる最大パーティション数。Icebergテーブルにこのしきい値を超えるパーティションがある場合、メタデータ最適化はスキップされます。 メタデータ最適化を無効にするには、 |
|
|
Icebergスプリットの生成に使用するスレッド数。 |
|
|
現在のメタデータログに保持する古いメタデータファイルの最大数。 |
|
|
コミットごとに最も古いメタデータファイルを削除するには、 |
|
テーブルプロパティ¶
テーブルプロパティは、基になるテーブルのメタデータを設定します。これは、CREATE TABLE/CREATE TABLE ASステートメントの鍵となります。テーブルプロパティは、WITH句を使用してコネクターに渡されます。
CREATE TABLE tablename
WITH (
property_name = property_value,
...
)
以下のテーブルプロパティは、Presto Icebergコネクターに固有であり、利用可能です。
プロパティ名 |
説明 |
デフォルト |
---|---|---|
|
テーブルデータファイルの形式( |
|
|
テーブルパーティショニングを任意で指定します。テーブルが列 |
|
|
テーブルのファイルシステムロケーションURIを任意で指定します。 |
|
|
新しいテーブルに使用するIceberg仕様の形式バージョン( |
|
|
同時アップサートリクエストが発生した場合に、失敗する前にメタデータのコミットを試行する回数を決定します。 |
|
|
新しいテーブルに使用するIceberg仕様の書き込み削除モード( |
|
|
現在のメタデータログに保持する古いメタデータファイルの最大数を任意で指定します。 |
|
|
コミットごとに最も古いメタデータファイルを削除するには、 |
|
以下のテーブル定義は、形式 ORC
、列 c1
および c2
によるパーティショニング、およびファイルシステムのロケーション s3://test_bucket/test_schema/test_table
を指定しています。
CREATE TABLE test_table (
c1 bigint,
c2 varchar,
c3 double
)
WITH (
format = 'ORC',
partitioning = ARRAY['c1', 'c2'],
location = 's3://test_bucket/test_schema/test_table')
)
セッションプロパティ¶
セッションプロパティは、特定のセッション内で実行されるクエリの動作変更を設定します。
プロパティ名 |
説明 |
---|---|
|
現在のセッションで、コネクタープロパティ |
|
現在のセッションで、コネクタープロパティ |
|
現在のセッションで、コネクタープロパティ |
キャッシュサポート¶
マニフェストファイルキャッシュ¶
Icebergバージョン1.1.0以降、Apache IcebergはIcebergマニフェストファイルの内容をメモリにキャッシュするメカニズムを提供しています。この機能は、リモートストレージからの小さなIcebergマニフェストファイルの繰り返し読み取りを減らすのに役立ちます。
注
現在、マニフェストファイルキャッシュは、Presto IcebergコネクターのHadoopおよびNessieカタログでサポートされています。
以下の構成プロパティが利用可能です。
プロパティ名 |
説明 |
デフォルト |
---|---|---|
|
マニフェストのキャッシュ機能を有効または無効にします。この機能は、 |
|
|
カタログで使用するカスタム FileIO 実装。マニフェストキャッシュを有効にするために設定する必要があります。 |
|
|
キャッシュサイズの最大サイズ(バイト単位)。 |
|
|
エントリがマニフェストキャッシュに保持される最大時間(ミリ秒単位)。 |
|
|
キャッシュ対象とみなすマニフェストファイルの最大長(バイト単位)。このサイズを超える長さのマニフェストファイルはキャッシュされません。 |
|
Alluxio データキャッシュ¶
Presto ワーカーは、読み取り時にリモートストレージのデータを元の形式(圧縮され、場合によっては暗号化されている)でローカルSSDにキャッシュします。
Iceberg カタログファイル (catalog/iceberg.properties) には、次の構成プロパティを設定する必要があります。
cache.enabled=true
cache.base-directory=file:///mnt/flash/data
cache.type=ALLUXIO
cache.alluxio.max-cache-size=1600GB
hive.node-selection-strategy=SOFT_AFFINITY
メトリクスを取得し、キャッシュの使用状況を確認するための JMX クエリ
SELECT * FROM jmx.current."com.facebook.alluxio:name=client.cachehitrate,type=gauges";
SELECT * FROM jmx.current."com.facebook.alluxio:name=client.cachebytesreadcache,type=meters";
SHOW TABLES FROM jmx.current like '%alluxio%';
ファイルおよびストライプフッターキャッシュ¶
開いているファイル記述子とストライプまたはファイルフッター情報をリーフワーカーメモリにキャッシュします。これらのデータは、ファイルの読み取り時に最も頻繁にアクセスされます。
Iceberg カタログファイル (catalog/iceberg.properties) には、次の構成プロパティを設定する必要があります。
# scheduling
hive.node-selection-strategy=SOFT_AFFINITY
# orc
iceberg.orc.file-tail-cache-enabled=true
iceberg.orc.file-tail-cache-size=100MB
iceberg.orc.file-tail-cache-ttl-since-last-access=6h
iceberg.orc.stripe-metadata-cache-enabled=true
iceberg.orc.stripe-footer-cache-size=100MB
iceberg.orc.stripe-footer-cache-ttl-since-last-access=6h
iceberg.orc.stripe-stream-cache-size=300MB
iceberg.orc.stripe-stream-cache-ttl-since-last-access=6h
# parquet
iceberg.parquet.metadata-cache-enabled=true
iceberg.parquet.metadata-cache-size=100MB
iceberg.parquet.metadata-cache-ttl-since-last-access=6h
メトリクスを取得し、キャッシュの使用状況を確認するための JMX クエリ
SELECT * FROM jmx.current."com.facebook.presto.hive:name=iceberg_parquetmetadata,type=cachestatsmbean";
メタストアキャッシュ¶
メタストアキャッシュは、スキーマ、テーブル、およびテーブル統計のみをキャッシュします。tableCache にキャッシュされたテーブルオブジェクトは、テーブルメタデータロケーションとテーブルプロパティの読み取りにのみ使用され、残りのテーブルメタデータはファイルシステム/オブジェクトストレージのメタデータロケーションから取得されます。
注
メタストアキャッシュは、Presto Iceberg コネクタの Hive カタログにのみ適用できます。
hive.metastore-cache-ttl=2d
hive.metastore-refresh-interval=3d
hive.metastore-cache-maximum-size=10000000
追加の非表示メタデータ列¶
Iceberg コネクタは、追加の非表示メタデータ列を公開します。SELECT ステートメントに含めることで、SQL クエリの一部としてこれらの列をクエリできます。
$path
列¶
$path
: この行のファイルのファイルシステムフルパス名
SELECT "$path", regionkey FROM "ctas_nation";
$path | regionkey
---------------------------------+-----------
/full/path/to/file/file.parquet | 2
$data_sequence_number
列¶
$data_sequence_number
: この行が追加された Iceberg データシーケンス番号
SELECT "$data_sequence_number", regionkey FROM "ctas_nation";
$data_sequence_number | regionkey
----------------------------------+------------
2 | 3
追加の非表示メタデータテーブル¶
Iceberg コネクタは、追加の非表示メタデータテーブルを公開します。テーブルに名前を追加することで、SQL クエリの一部としてこれらのテーブルをクエリできます。
$properties
テーブル¶
$properties
: 指定されたテーブルの一般的なプロパティ
SELECT * FROM "ctas_nation$properties";
key | value
----------------------+---------
write.format.default | PARQUET
$history
テーブル¶
$history
: テーブル状態の変更履歴
SELECT * FROM "ctas_nation$history";
made_current_at | snapshot_id | parent_id | is_current_ancestor
--------------------------------------+---------------------+-----------+---------------------
2022-11-25 20:56:31.784 Asia/Kolkata | 7606232158543069775 | NULL | true
$snapshots
テーブル¶
$snapshots
: テーブルスナップショットに関する詳細。詳細については、Iceberg Table Spec の Snapshots を参照してください。
SELECT * FROM "ctas_nation$snapshots";
committed_at | snapshot_id | parent_id | operation | manifest_list | summary
--------------------------------------+---------------------+-----------+-----------+----------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2022-11-25 20:56:31.784 Asia/Kolkata | 7606232158543069775 | NULL | append | s3://my-bucket/ctas_nation/metadata/snap-7606232158543069775-1-395a2cad-b244-409b-b030-cc44949e5a4e.avro | {changed-partition-count=1, added-data-files=1, total-equality-deletes=0, added-records=25, total-position-deletes=0, added-files-size=1648, total-delete-files=0, total-files-size=1648, total-records=25, total-data-files=1}
$manifests
テーブル¶
$manifests
: さまざまなテーブルスナップショットのマニフェストに関する詳細。詳細については、Iceberg Table Spec の Manifests を参照してください。
SELECT * FROM "ctas_nation$manifests";
path | length | partition_spec_id | added_snapshot_id | added_data_files_count | existing_data_files_count | deleted_data_files_count | partitions
---------------------------------------------------------------------------------+--------+-------------------+---------------------+------------------------+---------------------------+--------------------------+-----------
s3://my-bucket/ctas_nation/metadata/395a2cad-b244-409b-b030-cc44949e5a4e-m0.avro | 5957 | 0 | 7606232158543069775 | 1 | 0 | 0 | []
$partitions
テーブル¶
$partitions
: テーブルの詳細なパーティション情報
SELECT * FROM "ctas_nation$partitions";
row_count | file_count | total_size | nationkey | name | regionkey | comment
-----------+------------+------------+-------------------------------+------------------------------------------+------------------------------+------------------------------------------------------------
25 | 1 | 1648 | {min=0, max=24, null_count=0} | {min=ALGERIA, max=VIETNAM, null_count=0} | {min=0, max=4, null_count=0} | {min= haggle. careful, max=y final packaget, null_count=0}
$files
テーブル¶
$files
: テーブルの現在のスナップショット内のデータファイルの概要
SELECT * FROM "ctas_nation$files";
content | file_path | file_format | record_count | file_size_in_bytes | column_sizes | value_counts | null_value_counts | nan_value_counts | lower_bounds | upper_bounds | key_metadata | split_offsets | equality_ids
---------+------------------------------------------------------------------------------+-------------+--------------+--------------------+-----------------------------+--------------------------+----------------------+------------------+-------------------------------------------+--------------------------------------------+--------------+---------------+-------------
0 | s3://my-bucket/ctas_nation/data/9f889274-6f74-4d28-8164-275eef99f660.parquet | PARQUET | 25 | 1648 | {1=52, 2=222, 3=105, 4=757} | {1=25, 2=25, 3=25, 4=25} | {1=0, 2=0, 3=0, 4=0} | NULL | {1=0, 2=ALGERIA, 3=0, 4= haggle. careful} | {1=24, 2=VIETNAM, 3=4, 4=y final packaget} | NULL | NULL | NULL
$changelog
テーブル¶
このテーブルを使用すると、特定の順序で、時間経過に伴ってテーブルに発生した行レベルの変更を確認できます。$changelog
テーブルはテーブルに対する変更の履歴を表すと同時に、クエリを通じて処理可能なデータも提供します。
変更ログクエリの結果は常に、4つの列を持つ静的スキーマを返します。
operation
: (VARCHAR
) 行が挿入、更新、または削除されたかを示す。ordinal
: (int
) 特定の変更を他のすべての変更に対してテーブルに適用する必要がある相対的な順序を示す数値。snapshotid
: (bigint
) 行レベルの変更が行われたスナップショットを表します。rowdata
: (row(T)
) 特定の行のデータが含まれます。この型の内部値は、親テーブルのスキーマと一致します。
変更ログテーブルは、次の名前形式でクエリできます。
... FROM "<table>[@<begin snapshot ID>]$changelog[@<end snapshot ID>]"
<table>
は、テーブルの名前です。<begin snapshot ID>
は、変更の表示を開始するテーブルのスナップショットです。このパラメーターはオプションです。指定しない場合は、利用可能な最も古いスナップショットが使用されます。<end snapshot ID>
は、変更を表示する最後のスナップショットです。このパラメーターはオプションです。指定しない場合は、テーブルの最新のスナップショットが使用されます。
$changelog
テーブルの用途の 1 つは、レコードがいつテーブルに挿入または削除されたかを検出することです。これを実現するために、$changelog
テーブルは $snapshots
テーブルと組み合わせて使用できます。まず、$snapshots
テーブルからスナップショット ID を選択して、開始点を選択します。
SELECT * FROM "orders$snapshots";
committed_at | snapshot_id | parent_id | operation | manifest_list | summary
---------------------------------------------+---------------------+---------------------+-----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2023-09-26 08:45:20.930 America/Los_Angeles | 2423571386296047175 | NULL | append | file:/var/folders/g_/6_hxl7r16qdddw7956j_r88h0000gn/T/PrestoTest8140889264166671718/catalog/tpch/ctas_orders/metadata/snap-2423571386296047175-1-3f288b1c-95a9-406b-9e17-9cfe31a11b48.avro | {changed-partition-count=1, added-data-files=4, total-equality-deletes=0, added-records=100, total-position-deletes=0, added-files-size=9580, total-delete-files=0, total-files-size=9580, total-records=100, total-data-files=4}
2023-09-26 08:45:36.942 America/Los_Angeles | 8702997868627997320 | 2423571386296047175 | append | file:/var/folders/g_/6_hxl7r16qdddw7956j_r88h0000gn/T/PrestoTest8140889264166671718/catalog/tpch/ctas_orders/metadata/snap-8702997868627997320-1-a2e1c714-7eed-4e2c-b144-dae4147ebaa4.avro | {changed-partition-count=1, added-data-files=1, total-equality-deletes=0, added-records=1, total-position-deletes=0, added-files-size=1687, total-delete-files=0, total-files-size=11267, total-records=101, total-data-files=5}
2023-09-26 08:45:39.866 America/Los_Angeles | 7615903782581283889 | 8702997868627997320 | append | file:/var/folders/g_/6_hxl7r16qdddw7956j_r88h0000gn/T/PrestoTest8140889264166671718/catalog/tpch/ctas_orders/metadata/snap-7615903782581283889-1-d94c2114-fd22-4de2-9ab5-c0b5bf67282f.avro | {changed-partition-count=1, added-data-files=3, total-equality-deletes=0, added-records=3, total-position-deletes=0, added-files-size=4845, total-delete-files=0, total-files-size=16112, total-records=104, total-data-files=8}
2023-09-26 08:45:48.404 America/Los_Angeles | 677209275408372885 | 7615903782581283889 | append | file:/var/folders/g_/6_hxl7r16qdddw7956j_r88h0000gn/T/PrestoTest8140889264166671718/catalog/tpch/ctas_orders/metadata/snap-677209275408372885-1-ad69e208-1440-459b-93e8-48e61f961758.avro | {changed-partition-count=1, added-data-files=3, total-equality-deletes=0, added-records=5, total-position-deletes=0, added-files-size=4669, total-delete-files=0, total-files-size=20781, total-records=109, total-data-files=11}
これで、変更ログでクエリできるスナップショットがわかったので、テーブルの作成以降に加えられた変更を確認できます。具体的には、この例では、最も古いスナップショット ID: 2423571386296047175
を使用します。
SELECT * FROM "ctas_orders@2423571386296047175$changelog" ORDER BY ordinal;
operation | ordinal | snapshotid | rowdata
-----------+---------+---------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
INSERT | 0 | 8702997868627997320 | {orderkey=37504, custkey=1291, orderstatus=O, totalprice=165509.83, orderdate=1996-03-04, orderpriority=5-LOW, clerk=Clerk#000000871, shippriority=0, comment=c theodolites alongside of the fluffily bold requests haggle quickly against }
INSERT | 1 | 7615903782581283889 | {orderkey=12001, custkey=739, orderstatus=F, totalprice=138635.75, orderdate=1994-07-07, orderpriority=2-HIGH, clerk=Clerk#000000863, shippriority=0, comment=old, even theodolites. regular, special theodolites use furio}
INSERT | 1 | 7615903782581283889 | {orderkey=17989, custkey=364, orderstatus=F, totalprice=133669.05, orderdate=1994-01-17, orderpriority=4-NOT SPECIFIED, clerk=Clerk#000000547, shippriority=0, comment=ously express excuses. even theodolit}
INSERT | 1 | 7615903782581283889 | {orderkey=37504, custkey=1291, orderstatus=O, totalprice=165509.83, orderdate=1996-03-04, orderpriority=5-LOW, clerk=Clerk#000000871, shippriority=0, comment=c theodolites alongside of the fluffily bold requests haggle quickly against }
INSERT | 2 | 677209275408372885 | {orderkey=17991, custkey=92, orderstatus=O, totalprice=20732.51, orderdate=1998-07-09, orderpriority=4-NOT SPECIFIED, clerk=Clerk#000000636, shippriority=0, comment= the quickly express accounts. iron}
INSERT | 2 | 677209275408372885 | {orderkey=17989, custkey=364, orderstatus=F, totalprice=133669.05, orderdate=1994-01-17, orderpriority=4-NOT SPECIFIED, clerk=Clerk#000000547, shippriority=0, comment=ously express excuses. even theodolit}
INSERT | 2 | 677209275408372885 | {orderkey=17990, custkey=458, orderstatus=O, totalprice=218031.58, orderdate=1998-03-18, orderpriority=3-MEDIUM, clerk=Clerk#000000340, shippriority=0, comment=ounts wake final foxe}
INSERT | 2 | 677209275408372885 | {orderkey=18016, custkey=403, orderstatus=O, totalprice=174070.99, orderdate=1996-03-19, orderpriority=1-URGENT, clerk=Clerk#000000629, shippriority=0, comment=ly. quickly ironic excuses are furiously. carefully ironic pack}
INSERT | 2 | 677209275408372885 | {orderkey=18017, custkey=958, orderstatus=F, totalprice=203091.02, orderdate=1993-03-26, orderpriority=1-URGENT, clerk=Clerk#000000830, shippriority=0, comment=sleep quickly bold requests. slyly pending pinto beans haggle in pla}
プロシージャ¶
CALL ステートメントを使用して、データ操作または管理タスクを実行します。プロシージャは、カタログの system
スキーマで使用できます。
テーブルの登録¶
ファイルシステムにテーブルデータとメタデータがすでに存在する Iceberg テーブルをカタログに登録できます。カタログの system
スキーマで register_table
プロシージャを使用し、ターゲットスキーマ、目的のテーブル名、およびテーブルメタデータの場所を指定します。
CALL iceberg.system.register_table('schema_name', 'table_name', 'hdfs://localhost:9000/path/to/iceberg/table/metadata/dir')
注
指定された場所に同じバージョンのメタデータファイルが複数存在する場合、最後に変更されたものが使用されます。
特定のメタデータファイルにターゲットテーブルの状態が含まれている場合は、メタデータファイルを register_table
の引数としてオプションで含めることができます。
CALL iceberg.system.register_table('schema_name', 'table_name', 'hdfs://localhost:9000/path/to/iceberg/table/metadata/dir', '00000-35a08aed-f4b0-4010-95d2-9d73ef4be01c.metadata.json')
注
Iceberg REST カタログは、バックアップカタログのタイプによってはテーブル登録をサポートしていない場合があります。
注
Hive メタストアでテーブルを登録すると、プロシージャを呼び出すユーザーがテーブルの所有者として設定され、そのテーブルに対して SELECT
、INSERT
、UPDATE
、および DELETE
権限が付与されます。これらの権限は、GRANT
および REVOKE
コマンドを使用して変更できます。
注
Hive カタログを使用する場合、Hive コネクタを使用して登録された Iceberg テーブルを読み取ろうとすると失敗します。
テーブルの登録解除¶
カタログから Iceberg テーブルの登録を解除するには、カタログの system
スキーマで unregister_table
プロシージャを使用します。
CALL iceberg.system.unregister_table('schema_name', 'table_name')
注
unregister_table
を呼び出した後、Hive カタログを使用している場合にのみ、テーブルデータとメタデータがファイルシステムに残ります。これは、DROP TABLE コマンドにリストされている動作と同様です。
スナップショットへのロールバック¶
テーブルを特定のスナップショット ID にロールバックします。Iceberg は、Iceberg の system
スキーマで rollback_to_snapshot
プロシージャを使用することにより、特定のスナップショット ID にロールバックできます。
CALL iceberg.system.rollback_to_snapshot('table_name', 'snapshot_id');
次の引数を使用できます。
引数名 |
必須 |
型 |
説明 |
---|---|---|---|
|
✔️ |
文字列 |
更新するテーブルの名前 |
|
✔️ |
long |
ロールバック先のスナップショット ID |
スナップショットの有効期限¶
Iceberg の各 DML (データ操作言語) アクションは、スナップショットの分離とタイムトラベルのために古いデータとメタデータを保持しながら、新しいスナップショットを生成します。古いスナップショットとそのファイルを削除するには、expire_snapshots を使用します。
このプロシージャは、古いスナップショットとそれに対応するファイルを削除しますが、期限切れでないスナップショットに必要なファイルは決して削除しません。
次の引数を使用できます。
引数名 |
必須 |
型 |
説明 |
---|---|---|---|
|
✔️ |
文字列 |
更新するテーブルのスキーマ |
|
✔️ |
文字列 |
更新するテーブルの名前 |
|
タイムスタンプ |
スナップショットが削除される前のタイムスタンプ(デフォルト:5日前) |
|
|
int |
older_than に関係なく保持する先祖スナップショットの数(デフォルトは 1) |
|
|
long の配列 |
期限切れにするスナップショット ID の配列 |
例
特定の日時より古いスナップショットを削除しますが、最後の 10 個のスナップショットは保持します
CALL iceberg.system.expire_snapshots('schema_name', 'table_name', TIMESTAMP '2023-08-31 00:00:00.000', 10);
スナップショット ID 10001 および 10002 を持つスナップショットを削除します(これらのスナップショット ID は現在のスナップショットではないことに注意してください)
CALL iceberg.system.expire_snapshots(schema => 'schema_name', table_name => 'table_name', snapshot_ids => ARRAY[10001, 10002]);
孤立ファイルの削除¶
Iceberg テーブルのメタデータファイルで参照されていないファイルを削除するために使用します。
次の引数を使用できます。
引数名 |
必須 |
型 |
説明 |
---|---|---|---|
|
✔️ |
文字列 |
クリーンアップするテーブルのスキーマ |
|
✔️ |
文字列 |
クリーンアップするテーブルの名前 |
|
タイムスタンプ |
このタイムスタンプより前に作成された孤立ファイルを削除します(デフォルト:3日前) |
例
テーブル db.sample に認識されておらず、指定されたタイムスタンプより古いファイルをすべて削除します
CALL iceberg.system.remove_orphan_files('db', 'sample', TIMESTAMP '2023-08-31 00:00:00.000');
テーブル db.sample に登録されていない、かつ3日前(デフォルト)に作成されたファイルを削除します。
CALL iceberg.system.remove_orphan_files(schema => 'db', table_name => 'sample');
SQLサポート¶
Icebergコネクタは、Icebergのテーブルとスキーマ(データベース)のクエリと操作をサポートしています。以下は、PrestoでサポートされているSQL操作の例です。
CREATE SCHEMA¶
my-bucket
という名前のS3バケットにテーブルを保存する、web
という名前の新しいIcebergスキーマを作成します。
CREATE SCHEMA iceberg.web
WITH (location = 's3://my-bucket/')
CREATE TABLE¶
ds
と country
でパーティション分割され、ORCファイル形式を使用して保存される web
スキーマに、page_views
という名前の新しいIcebergテーブルを作成します。
CREATE TABLE iceberg.web.page_views (
view_time timestamp,
user_id bigint,
page_url varchar,
ds date,
country varchar
)
WITH (
format = 'ORC',
partitioning = ARRAY['ds', 'country']
)
Icebergフォーマットバージョン2でIcebergテーブルを作成します。
CREATE TABLE iceberg.web.page_views_v2 (
view_time timestamp,
user_id bigint,
page_url varchar,
ds date,
country varchar
)
WITH (
format = 'ORC',
partitioning = ARRAY['ds', 'country'],
format_version = '2'
)
パーティション列の変換¶
パーティション分割のために特定の列を選択するだけでなく、transform
関数を使用して、列の変換された値でテーブルをパーティション分割できます。
Presto Icebergコネクタで使用可能な変換は次のとおりです。
Bucket
(ハッシュ関数を使用して、指定された数のバケットにデータをパーティション分割します)Truncate
(フィールドの切り捨てられた値に基づいてテーブルをパーティション分割し、切り捨てられた値の幅を指定できます)Identity
(変更されていないソース値を使用してデータをパーティション分割します)Year
(日付またはタイムスタンプの年を1970年からの年として抽出して、整数値を使用してデータをパーティション分割します)Month
(日付またはタイムスタンプの月を1970-01-01からの月として抽出して、整数値を使用してデータをパーティション分割します)Day
(日付またはタイムスタンプの日を1970-01-01からの日として抽出して、整数値を使用してデータをパーティション分割します)Hour
(タイムスタンプの時間を1970-01-01 00:00:00からの時間として抽出して、整数値を使用してデータをパーティション分割します)
等しいサイズの範囲の8つのバケットにパーティション分割されたIcebergテーブルを作成します。
CREATE TABLE players (
id int,
name varchar,
team varchar
)
WITH (
format = 'ORC',
partitioning = ARRAY['bucket(team, 8)']
);
team
フィールドの最初の文字でパーティション分割されたIcebergテーブルを作成します。
CREATE TABLE players (
id int,
name varchar,
team varchar
)
WITH (
format = 'ORC',
partitioning = ARRAY['truncate(team, 1)']
);
ds
でパーティション分割されたIcebergテーブルを作成します。
CREATE TABLE players (
id int,
name varchar,
team varchar,
ds date
)
WITH (
format = 'ORC',
partitioning = ARRAY['year(ds)']
);
ts
でパーティション分割されたIcebergテーブルを作成します。
CREATE TABLE players (
id int,
name varchar,
team varchar,
ts timestamp
)
WITH (
format = 'ORC',
partitioning = ARRAY['hour(ts)']
);
CREATE VIEW¶
Icebergコネクタは、HiveおよびGlueメタストアでのビューの作成をサポートしています。 CREATE TABLE の例で作成された iceberg.web.page_views
テーブルの view_page_views
という名前のビューを作成するには、次のようにします。
CREATE VIEW iceberg.web.view_page_views AS SELECT user_id, country FROM iceberg.web.page_views;
INSERT INTO¶
page_views
テーブルにデータを挿入します。
INSERT INTO iceberg.web.page_views VALUES(TIMESTAMP '2023-08-12 03:04:05.321', 1, 'https://example.com', current_date, 'country');
CREATE TABLE AS SELECT¶
既存のテーブル page_views
から新しいテーブル page_views_new
を作成します。
CREATE TABLE iceberg.web.page_views_new AS SELECT * FROM iceberg.web.page_views
SELECT¶
SELECTテーブル操作は、コネクタのIcebergフォーマットバージョン1およびバージョン2でサポートされています。
SELECT * FROM iceberg.web.page_views;
SELECT * FROM iceberg.web.page_views_v2;
削除ファイル付きのテーブル¶
Iceberg V2テーブルは、行レベルの削除をサポートしています。詳細については、Iceberg Table Specの行レベルの削除を参照してください。 Prestoは、Position Delete FileおよびEquality Delete Fileを含む、削除ファイルの読み取りをサポートしています。 Prestoは読み取り時にこれらの削除ファイルをマージして、最新の結果を読み取ります。
ALTER TABLE¶
テーブルの変更操作は、Icebergコネクタでサポートされています。
ALTER TABLE iceberg.web.page_views ADD COLUMN zipcode VARCHAR;
ALTER TABLE iceberg.web.page_views RENAME COLUMN zipcode TO location;
ALTER TABLE iceberg.web.page_views DROP COLUMN location;
新しい列をパーティション列として追加するには、列の変換関数を特定します。テーブルは、列の変換された値でパーティション分割されます。
ALTER TABLE iceberg.web.page_views ADD COLUMN zipcode VARCHAR WITH (partitioning = 'identity');
ALTER TABLE iceberg.web.page_views ADD COLUMN location VARCHAR WITH (partitioning = 'truncate(2)');
ALTER TABLE iceberg.web.page_views ADD COLUMN location VARCHAR WITH (partitioning = 'bucket(8)');
ALTER TABLE iceberg.web.page_views ADD COLUMN dt date WITH (partitioning = 'year');
ALTER TABLE iceberg.web.page_views ADD COLUMN ts timestamp WITH (partitioning = 'month');
ALTER TABLE iceberg.web.page_views ADD COLUMN dt date WITH (partitioning = 'day');
ALTER TABLE iceberg.web.page_views ADD COLUMN ts timestamp WITH (partitioning = 'hour');
TRUNCATE¶
Icebergコネクタは、TRUNCATE TABLE
を使用して、メタデータカタログからテーブルをドロップすることなく、テーブルからすべてのデータを削除できます。
TRUNCATE TABLE nation;
TRUNCATE TABLE;
SELECT * FROM nation;
nationkey | name | regionkey | comment
-----------+------+-----------+---------
(0 rows)
DELETE¶
Icebergコネクタは、DELETE FROM
を使用してテーブルからデータを削除できます。たとえば、テーブル lineitem
から削除するには、次のようにします。
DELETE FROM lineitem;
DELETE FROM lineitem WHERE linenumber = 1;
DELETE FROM lineitem WHERE linenumber not in (1, 3, 5, 7) and linestatus in ('O', 'F');
注
フィルター処理された列は、EQUALS、LESS THAN、LESS THAN EQUALSなどの比較演算子のみをサポートします。
削除は、最新のスナップショットでのみ発生する必要があります。
V1テーブルの場合、Icebergコネクタは1つ以上のパーティション全体でのみデータを削除できます。フィルター内の列はすべて、ターゲットテーブルの同一変換されたパーティション列である必要があります。
DROP TABLE¶
page_views
テーブルをドロップします。
DROP TABLE iceberg.web.page_views
Hive MetastoreおよびGlueカタログを使用してIcebergテーブルをドロップすると、メタストアからメタデータのみが削除されます。
HadoopおよびNessieカタログを使用してIcebergテーブルをドロップすると、テーブル内のすべてのデータとメタデータが削除されます。
DROP VIEW¶
view_page_views
ビューをドロップします。
DROP VIEW iceberg.web.view_page_views;
DROP SCHEMA¶
iceberg.web
スキーマをドロップします。
DROP SCHEMA iceberg.web
SHOW CREATE TABLE¶
SHOW CREATE TABLE
を使用して、指定されたIcebergテーブルを作成するSQLステートメントを表示します。
たとえば、パーティション分割されたIcebergテーブル customer
からの SHOW CREATE TABLE
は次のようになります。
SHOW CREATE TABLE customer;
CREATE TABLE iceberg.tpch_iceberg.customer (
"custkey" bigint,
"name" varchar,
"address" varchar,
"nationkey" bigint,
"phone" varchar,
"acctbal" double,
"mktsegment" varchar,
"comment" varchar
)
WITH (
delete_mode = 'copy-on-write',
format = 'PARQUET',
format_version = '2',
location = 's3a://tpch-iceberg/customer',
partitioning = ARRAY['mktsegment']
)
(1 row)
パーティション分割されていないIcebergテーブル region
からの SHOW CREATE TABLE
は次のようになります。
SHOW CREATE TABLE region;
CREATE TABLE iceberg.tpch_iceberg.region (
"regionkey" bigint,
"name" varchar,
"comment" varchar
)
WITH (
delete_mode = 'copy-on-write',
format = 'PARQUET',
format_version = '2',
location = 's3a://tpch-iceberg/region'
)
(1 row)
SHOW COLUMNS¶
SHOW COLUMNS
を使用して、テーブル内の列をデータ型やその他の属性とともに一覧表示します。
たとえば、パーティション分割されたIcebergテーブル customer
からの SHOW COLUMNS
は次のようになります。
SHOW COLUMNS FROM customer;
Column | Type | Extra | Comment
------------+---------+---------------+---------
custkey | bigint | |
name | varchar | |
address | varchar | |
nationkey | bigint | |
phone | varchar | |
acctbal | double | |
mktsegment | varchar | partition key |
comment | varchar | |
(8 rows)
パーティション分割されていないIcebergテーブル region
からの SHOW COLUMNS
は次のようになります。
SHOW COLUMNS FROM region;
Column | Type | Extra | Comment
-----------+---------+-------+---------
regionkey | bigint | |
name | varchar | |
comment | varchar | |
(3 rows)
DESCRIBE¶
DESCRIBE
を使用して、テーブル内の列をデータ型やその他の属性とともに一覧表示します。 DESCRIBE
は SHOW COLUMNS
のエイリアスです。
たとえば、パーティション分割されたIcebergテーブル customer
からの DESCRIBE
は次のようになります。
DESCRIBE customer;
Column | Type | Extra | Comment
------------+---------+---------------+---------
custkey | bigint | |
name | varchar | |
address | varchar | |
nationkey | bigint | |
phone | varchar | |
acctbal | double | |
mktsegment | varchar | partition key |
comment | varchar | |
(8 rows)
パーティション分割されていないIcebergテーブル region
からの DESCRIBE
は次のようになります。
DESCRIBE region;
Column | Type | Extra | Comment
-----------+---------+-------+---------
regionkey | bigint | |
name | varchar | |
comment | varchar | |
(3 rows)
スキーマの進化¶
IcebergとPresto Icebergコネクタは、列の追加、削除、名前変更など、インプレーステーブルの進化(スキーマの進化とも呼ばれる)をサポートしています。スキーマの進化により、ユーザーはPresto Icebergコネクタを有効にした後、SQLでテーブルスキーマを進化させることができます。
Parquetライターのバージョン¶
Prestoは、Icebergカタログ用にParquetライターバージョンV1とV2をサポートするようになりました。これは、セッションプロパティ parquet_writer_version
と構成プロパティ hive.parquet.writer.version
を使用して切り替えることができます。これらのプロパティの有効な値は PARQUET_1_0
と PARQUET_2_0
です。デフォルトは PARQUET_1_0
です。
クエリの例¶
TPCH nation テーブルから作成された、ctas_nation という名前のIcebergテーブルを作成しましょう。テーブルには、nationkey、name、regionkey、comment の4つの列があります。
USE iceberg.tpch;
CREATE TABLE IF NOT EXISTS ctas_nation AS (SELECT * FROM nation);
DESCRIBE ctas_nation;
Column | Type | Extra | Comment
-----------+---------+-------+---------
nationkey | bigint | |
name | varchar | |
regionkey | bigint | |
comment | varchar | |
(4 rows)
ALTER TABLE ステートメントを使用して、新しい列をIcebergテーブルに簡単に追加できます。次のクエリは、zipcode という名前の新しい列をテーブルに追加します。
ALTER TABLE ctas_nation ADD COLUMN zipcode VARCHAR;
DESCRIBE ctas_nation;
Column | Type | Extra | Comment
-----------+---------+-------+---------
nationkey | bigint | |
name | varchar | |
regionkey | bigint | |
comment | varchar | |
zipcode | varchar | |
(5 rows)
新しい列の名前を address という別の名前に変更することもできます。
ALTER TABLE ctas_nation RENAME COLUMN zipcode TO address;
DESCRIBE ctas_nation;
Column | Type | Extra | Comment
-----------+---------+-------+---------
nationkey | bigint | |
name | varchar | |
regionkey | bigint | |
comment | varchar | |
address | varchar | |
(5 rows)
最後に、新しい列を削除できます。テーブル列は元の状態に戻ります。
ALTER TABLE ctas_nation DROP COLUMN address;
DESCRIBE ctas_nation;
Column | Type | Extra | Comment
-----------+---------+-------+---------
nationkey | bigint | |
name | varchar | |
regionkey | bigint | |
comment | varchar | |
(4 rows)
タイムトラベル¶
IcebergとPresto Icebergコネクタは、一意のスナップショットIDで識別されるテーブルスナップショットを介したタイムトラベルをサポートしています。スナップショットIDは、$snapshots
メタデータテーブルに格納されます。テーブルの状態を以前のスナップショットIDにロールバックできます。また、VERSION(SYSTEM_VERSION)およびTIMESTAMP(SYSTEM_TIME)オプションを使用したタイムトラベルクエリもサポートしています。
クエリの例¶
スキーマの進化のクエリ例と同様に、TPCH nation テーブルから ctas_nation という名前のIcebergテーブルを作成します。
USE iceberg.tpch;
CREATE TABLE IF NOT EXISTS ctas_nation AS (SELECT * FROM nation);
DESCRIBE ctas_nation;
Column | Type | Extra | Comment
-----------+---------+-------+---------
nationkey | bigint | |
name | varchar | |
regionkey | bigint | |
comment | varchar | |
(4 rows)
$snapshots メタデータテーブルからIcebergテーブルのスナップショットIDを見つけることができます。
SELECT snapshot_id FROM iceberg.tpch."ctas_nation$snapshots" ORDER BY committed_at;
snapshot_id
---------------------
5837462824399906536
(1 row)
今のところ、テーブルを作成したばかりなので、スナップショットIDは1つしかありません。テーブルに1行挿入して、スナップショットIDの変更を確認してみましょう。
INSERT INTO ctas_nation VALUES(25, 'new country', 1, 'comment');
SELECT snapshot_id FROM iceberg.tpch."ctas_nation$snapshots" ORDER BY committed_at;
snapshot_id
---------------------
5837462824399906536
5140039250977437531
(2 rows)
テーブルに新しい行が挿入されると、新しいスナップショット(5140039250977437531)が作成されます。新しい行は、次を実行して検証できます。
SELECT * FROM ctas_nation WHERE name = 'new country';
nationkey | name | regionkey | comment
-----------+-------------+-----------+---------
25 | new country | 1 | comment
(1 row)
タイムトラベル機能を使用すると、iceberg.system.rollback_to_snapshot を呼び出すことで、新しい行なしで以前の状態にロールバックできます。
CALL iceberg.system.rollback_to_snapshot('tpch', 'ctas_nation', 5837462824399906536);
ここで、テーブルをもう一度確認すると、以前の状態にロールバックしたため、新しく挿入された行は存在しなくなっていることがわかります。
SELECT * FROM ctas_nation WHERE name = 'new country';
nationkey | name | regionkey | comment
-----------+------+-----------+---------
(0 rows)
VERSION(SYSTEM_VERSION)およびTIMESTAMP(SYSTEM_TIME)を使用したタイムトラベル¶
Icebergコネクタを使用して、テーブルの過去のデータにアクセスします。データが変更または削除された場合でも、特定の時点でのテーブルの表示方法を確認できます。
// snapshot ID 5300424205832769799
INSERT INTO ctas_nation VALUES(10, 'united states', 1, 'comment');
// snapshot ID 6891257133877048303
INSERT INTO ctas_nation VALUES(20, 'canada', 2, 'comment');
// snapshot ID 705548372863208787
INSERT INTO ctas_nation VALUES(30, 'mexico', 3, 'comment');
// snapshot ID for first record
SELECT * FROM ctas_nation FOR VERSION AS OF 5300424205832769799;
// snapshot ID for first record using SYSTEM_VERSION
SELECT * FROM ctas_nation FOR SYSTEM_VERSION AS OF 5300424205832769799;
nationkey | name | regionkey | comment
-----------+---------------+-----------+---------
10 | united states | 1 | comment
(1 row)
// snapshot ID for second record using BEFORE clause to retrieve previous state
SELECT * FROM ctas_nation FOR SYSTEM_VERSION BEFORE 6891257133877048303;
nationkey | name | regionkey | comment
-----------+---------------+-----------+---------
10 | united states | 1 | comment
(1 row)
上記の例では、SYSTEM_VERSIONをVERSIONのエイリアスとして使用できます。
FOR TIMESTAMP AS OF TIMESTAMPを使用して、テーブルの過去のデータにアクセスできます。クエリは、指定されたタイムスタンプに最も近いテーブルスナップショットを使用して、テーブルの状態を返します。この例では、SYSTEM_TIMEをTIMESTAMPのエイリアスとして使用できます。
// In following query, timestamp string is matching with second inserted record.
SELECT * FROM ctas_nation FOR TIMESTAMP AS OF TIMESTAMP '2023-10-17 13:29:46.822 America/Los_Angeles';
// Same example using SYSTEM_TIME as an alias for TIMESTAMP
SELECT * FROM ctas_nation FOR SYSTEM_TIME AS OF TIMESTAMP '2023-10-17 13:29:46.822 America/Los_Angeles';
nationkey | name | regionkey | comment
-----------+---------------+-----------+---------
10 | united states | 1 | comment
20 | canada | 2 | comment
(2 rows)
FOR TIMESTAMP AS OF に続くオプションは、タイムゾーン値を持つタイムスタンプを返す任意の式を受け入れることができます。たとえば、TIMESTAMP ‘2023-10-17 13:29:46.822 America/Los_Angeles’ は、式の定数文字列です。次のクエリでは、式 CURRENT_TIMESTAMP がタイムゾーン値を持つ現在のタイムスタンプを返します。
SELECT * FROM ctas_nation FOR TIMESTAMP AS OF CURRENT_TIMESTAMP;
nationkey | name | regionkey | comment
-----------+---------------+-----------+---------
10 | united states | 1 | comment
20 | canada | 2 | comment
30 | mexico | 3 | comment
(3 rows)
// In following query, timestamp string is matching with second inserted record.
// BEFORE clause returns first record which is less than timestamp of the second record.
SELECT * FROM ctas_nation FOR TIMESTAMP BEFORE TIMESTAMP '2023-10-17 13:29:46.822 America/Los_Angeles';
nationkey | name | regionkey | comment
-----------+---------------+-----------+---------
10 | united states | 1 | comment
(1 row)
型マッピング¶
PrestoDBとIcebergは、互いにサポートしていないデータ型を持っています。Icebergを使用してデータを読み書きする際、Prestoは各Icebergデータ型を対応するPrestoデータ型に、また各Prestoデータ型を同等のIcebergデータ型に変換します。以下の表は、PrestoDBとIceberg間の具体的な型マッピングを詳細に示しています。
IcebergからPrestoDBへの型マッピング¶
Iceberg型と関連するPrestoDB型のマッピング
Iceberg型 |
PrestoDB型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
その他の型はサポートされていません。
PrestoDBからIcebergへの型マッピング¶
PrestoDB型と関連するIceberg型のマッピング
PrestoDB型 |
Iceberg型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
その他の型はサポートされていません。