É possível acessar tabelas do S3 por meio de mecanismos de consulta de código aberto, como o Apache Spark, usando o catálogo de cliente do Catálogo de Tabelas do Amazon S3 para Apache Iceberg. O Catálogo de Tabelas do Amazon S3 para Apache Iceberg é uma biblioteca de código aberto hospedada pelo AWS Labs. Ele traduz as operações do Apache Iceberg nos mecanismos de consulta (como descoberta de tabelas, atualizações de metadados e adição ou remoção de tabelas) em operações de API da funcionalidade Tabelas do S3.
O Catálogo de Tabelas do Amazon S3 para Apache Iceberg é distribuído como um Maven JAR chamado s3-tables-catalog-for-iceberg.jar
. É possível criar o JAR do catálogo de cliente no Repositório do AWS Labs GitHub
Usar o Catálogo de Tabelas do Amazon S3 para Apache Iceberg com o Apache Spark
É possível usar o Catálogo de Tabelas do Amazon S3 para Apache Iceberg como catálogo de cliente para se conectar a tabelas de aplicações de código aberto ao inicializar uma sessão do Spark. Na configuração da sessão, você especifica dependências em relação ao Iceberg e ao Amazon S3, e cria um catálogo personalizado que usa o bucket de tabela como warehouse de metadados.
Como inicializar uma sessão do Spark usando o Catálogo de Tabelas do Amazon S3 para Apache Iceberg
-
Inicialize o Spark usando o comando a seguir. Para usar o comando, substitua o
número de versão
do Catálogo de Tabelas do Amazon S3 para Apache Iceberg pela versão mais recente do Repositório do AWS Labs GitHube o ARN do bucket de tabela
pelo ARN da sua própria tabela.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
Consultar tabelas do S3 com o Spark SQL
Usando o Spark, você pode executar operações DQL, DML e DDL em tabelas do S3. Ao consultar tabelas, você usa o nome da tabela totalmente qualificado, bem como o nome do catálogo da sessão, seguindo este padrão:
CatalogName
.NamespaceName
.TableName
Os exemplos de consultas a seguir mostram algumas maneiras de interagir com as tabelas do S3. Para usar esses exemplos de consultas no mecanismo de consulta, substitua os valores dos espaços reservados para entrada do usuário
pelos seus próprios.
Como consultar tabelas com o Spark
-
Crie um namespace
spark.sql(" CREATE NAMESPACE IF NOT EXISTS
s3tablesbucket
.my_namespace
") -
Criar uma tabela
spark.sql(" CREATE TABLE IF NOT EXISTS
s3tablesbucket
.my_namespace
.`my_table
` ( id INT, name STRING, value INT ) USING iceberg ") -
Consultar uma tabela
spark.sql(" SELECT * FROM
s3tablesbucket
.my_namespace
.`my_table
` ").show() -
Inserir dados em uma tabela
spark.sql( """ INSERT INTO
s3tablesbucket
.my_namespace
.my_table
VALUES (1, 'ABC', 100), (2, 'XYZ', 200) """) -
Carregue um arquivo de dados existente em uma tabela.
Leia os dados no Spark.
val data_file_location = "Path such as S3 URI to data file" val data_file = spark.read.parquet(
data_file_location
)Grave os dados em uma tabela do Iceberg.
data_file.writeTo("
s3tablesbucket
.my_namespace
.my_table
").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()