Acceso a tablas de Amazon S3 con el catálogo de Tablas de Amazon S3 para Apache Iceberg
Puede acceder a las tablas de S3 desde motores de consulta de código abierto como Apache Spark utilizando el catálogo de clientes de Tablas de Amazon S3 para Apache Iceberg. El catálogo de Tablas de Amazon S3 para Apache Iceberg es una biblioteca de código abierto alojada por AWS Labs. Funciona mediante la traducción de las operaciones de Apache Iceberg en los motores de consulta (como el descubrimiento de tablas, las actualizaciones de metadatos y la adición o eliminación de tablas) en operaciones de la API de tablas de S3.
El catálogo de Tablas de Amazon S3 para Apache Iceberg se distribuye como un archivo Maven JAR llamado s3-tables-catalog-for-iceberg.jar
. Puede crear el archivo JAR del catálogo de clientes desde el repositorio de AWS Labs GitHub
Uso del catálogo de Tablas de Amazon S3 para Apache Iceberg con Apache Spark
Puede usar el catálogo de Tablas de Amazon S3 para Apache Iceberg como catálogo de clientes para conectarse a tablas desde aplicaciones de código abierto al inicializar una sesión de Spark. En la configuración de la sesión, especifique las dependencias de Iceberg y Amazon S3, y cree un catálogo personalizado que utilice su bucket de tablas como almacén de metadatos.
Requisitos previos
Una identidad de IAM con acceso al bucket de tablas y a las acciones de tablas de S3. Para obtener más información, consulte Administración de acceso para Tablas de S3.
Para inicializar una sesión de Spark usando el catálogo de Tablas de Amazon S3 para Apache Iceberg
-
Inicialice una sesión de Spark con el siguiente comando. Para utilizar el comando, reemplace el
número de versión
del catálogo de Tablas de Amazon S3 para Apache Iceberg por la última versión del repositorio de AWS Labs GitHuby el ARN del bucket de tablas
por el ARN de su propio bucket de tablas.spark-shell \ --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.1,software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:
0.1.4
\ --conf spark.sql.catalog.s3tablesbucket
=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.s3tablesbucket
.catalog-impl=software.amazon.s3tables.iceberg.S3TablesCatalog \ --conf spark.sql.catalog.s3tablesbucket
.warehouse=arn:aws:s3tables:us-east-1
:111122223333
:bucket/amzn-s3-demo-table-bucket
\ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
Consulta de tablas de S3 con Spark SQL
Con Spark, puede ejecutar operaciones DQL, DML y DDL en tablas de S3. Al consultar tablas, se utiliza el nombre de tabla completamente calificado (incluido el nombre del catálogo de sesión) siguiendo este patrón:
CatalogName
.NamespaceName
.TableName
En las siguientes consultas de ejemplo se muestran algunas formas de interactuar con tablas de S3. Para utilizar estas consultas de ejemplo en el motor de consultas, reemplace los valores de marcador de posición de entrada de usuario
por los suyos propios.
Consulta de tablas con Spark
-
Creación de un espacio de nombres de
spark.sql(" CREATE NAMESPACE IF NOT EXISTS
s3tablesbucket
.my_namespace
") -
Creación de una tabla
spark.sql(" CREATE TABLE IF NOT EXISTS
s3tablesbucket
.my_namespace
.`my_table
` ( id INT, name STRING, value INT ) USING iceberg ") -
Consulta de una tabla
spark.sql(" SELECT * FROM
s3tablesbucket
.my_namespace
.`my_table
` ").show() -
Inserción de datos en una tabla
spark.sql( """ INSERT INTO
s3tablesbucket
.my_namespace
.my_table
VALUES (1, 'ABC', 100), (2, 'XYZ', 200) """) -
Carga de un archivo de datos existente en una tabla
Lea los datos en Spark.
val data_file_location = "Path such as S3 URI to data file" val data_file = spark.read.parquet(
data_file_location
)Escriba los datos en una tabla de Iceberg.
data_file.writeTo("
s3tablesbucket
.my_namespace
.my_table
").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()