View a markdown version of this page

Membuat tabel Amazon S3 - Amazon Simple Storage Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Membuat tabel Amazon S3

Tabel Amazon S3 adalah subsumber daya dari bucket tabel. Tabel disimpan dalam Apache Iceberg format sehingga Anda dapat bekerja dengannya dengan menggunakan mesin kueri dan aplikasi lain yang mendukungApache Iceberg. Amazon S3 terus mengoptimalkan tabel Anda untuk membantu mengurangi biaya penyimpanan dan meningkatkan kinerja kueri analitik.

Saat Anda membuat tabel, Amazon S3 secara otomatis menghasilkan lokasi gudang untuk tabel tersebut. Lokasi gudang adalah lokasi S3 unik di mana Anda dapat membaca dan menulis objek yang terkait dengan tabel. Contoh berikut menunjukkan format lokasi gudang:

s3://63a8e430-6e0b-46f5-k833abtwr6s8tmtsycedn8s4yc3xhuse1b--table-s3

Tabel memiliki format Amazon Resource Name (ARN) berikut:

arn:aws:s3tables:region:owner-account-id:bucket/bucket-name/table/table-id

Secara default, Anda dapat membuat hingga 10.000 tabel dalam bucket tabel. Untuk meminta kenaikan kuota untuk bucket atau tabel meja, hubungi Dukungan.

Anda dapat membuat tabel dengan menggunakan konsol Amazon S3, API REST Amazon S3, AWS SDK, AWS Command Line Interface (AWS CLI), atau mesin kueri yang terhubung ke bucket tabel Anda.

Ketika Anda membuat tabel, Anda dapat menentukan pengaturan enkripsi untuk tabel itu, kecuali Anda membuat tabel dengan Athena. Jika Anda tidak menentukan pengaturan enkripsi, tabel dienkripsi dengan pengaturan default untuk bucket tabel. Untuk informasi selengkapnya, lihat Menentukan enkripsi untuk tabel.

Prasyarat untuk membuat tabel

Untuk membuat tabel, Anda harus terlebih dahulu melakukan hal berikut:

  • Buat ember meja.

  • Buat namespacedi ember meja Anda.

  • Pastikan Anda memiliki izin AWS Identity and Access Management (IAM) untuk s3tables:CreateTable dans3tables:PutTableData.

  • catatan

    Jika Anda menggunakan SSE-KMS enkripsi untuk tabel Anda, Anda memerlukan izin untuks3tables:PutTableEncryption, dan DescribeKey izin pada AWS KMS kunci yang dipilih. Selain itu, AWS KMS kunci yang Anda gunakan perlu memberikan izin Tabel S3 untuk melakukan pemeliharaan tabel otomatis. Untuk informasi selengkapnya, lihat Persyaratan izin untuk SSE-KMS enkripsi Tabel S3

Untuk informasi tentang nama tabel yang valid, lihatAturan penamaan untuk tabel dan ruang nama.

penting

Saat membuat tabel, pastikan Anda menggunakan semua huruf kecil dalam nama tabel dan definisi tabel Anda. Misalnya, pastikan bahwa nama kolom Anda semuanya huruf kecil. Jika nama tabel atau definisi tabel berisi huruf kapital, tabel tidak didukung oleh AWS Lake Formation atau AWS Glue Data Catalog. Dalam hal ini, tabel Anda tidak akan terlihat oleh layanan AWS analitik seperti Amazon Athena, bahkan jika bucket tabel Anda terintegrasi dengan layanan AWS analitik.

Jika definisi tabel Anda berisi huruf kapital, Anda menerima pesan kesalahan berikut saat menjalankan SELECT kueri di Athena: “GENERIC_INTERNAL_ERROR: Dapatkan permintaan tabel gagal: com.amazonaws.services.glue.model. ValidationException: Sumber Daya Federasi tidak didukung - Nama tabel atau kolom tidak valid.”

Prosedur berikut menggunakan konsol Amazon S3 untuk membuat tabel dengan Amazon Athena. Jika Anda belum membuat namespace di bucket tabel Anda, Anda dapat melakukannya sebagai bagian dari proses ini. Sebelum melakukan langkah-langkah berikut, pastikan Anda telah mengintegrasikan bucket tabel dengan layanan AWS analitik di Wilayah ini. Untuk informasi selengkapnya, lihat Mengintegrasikan Tabel Amazon S3 dengan AWS layanan analitik.

catatan

Saat Anda membuat tabel menggunakan Athena, tabel tersebut mewarisi pengaturan enkripsi default dari bucket tabel. Jika Anda ingin menggunakan jenis enkripsi yang berbeda, Anda perlu membuat tabel menggunakan metode lain.

Untuk membuat tabel
  1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon S3 di https://console.aws.amazon.com/s3/.

  2. Di panel navigasi kiri, pilih Buc ket tabel.

  3. Pada halaman Bucket tabel, pilih bucket tempat Anda ingin membuat tabel.

  4. Pada halaman detail bucket, pilih Buat tabel dengan Athena.

  5. Di kotak dialog Buat tabel dengan Athena, lakukan salah satu hal berikut:

    • Buat namespace baru. Pilih Buat namespace, lalu masukkan nama di bidang nama Nam espace. Nama namespace harus terdiri dari 1 hingga 255 karakter dan unik dalam bucket tabel. Karakter yang valid adalah a—z, 0-9, dan garis bawah (). _ Garis bawah tidak diperbolehkan di awal nama namespace.

    • Pilih Buat namespace.

    • Tentukan namespace yang ada. Pilih Tentukan namespace yang ada dalam bucket tabel ini. Kemudian pilih Pilih dari ruang nama yang ada atau Masukkan nama namespace yang ada. Jika Anda memiliki lebih dari 1.000 ruang nama di bucket Anda, Anda harus memasukkan nama namespace jika tidak muncul dalam daftar.

  6. Pilih Buat tabel dengan Athena.

  7. Konsol Amazon Athena terbuka dan editor kueri Athena muncul. Bid ang Katalog harus diisi dengan s3tablescatalog/ diikuti dengan nama bucket tabel Anda, misalnya, s3tablescatalog/. amzn-s3-demo-bucket Bid ang Database harus diisi dengan namespace yang Anda buat atau pilih sebelumnya.

    catatan

    Jika Anda tidak melihat nilai-nilai ini di bidang Katalog dan Database, pastikan Anda telah mengintegrasikan bucket tabel dengan layanan AWS analitik di Wilayah ini. Untuk informasi selengkapnya, lihat Mengintegrasikan Tabel Amazon S3 dengan AWS layanan analitik.

  8. Editor kueri diisi dengan kueri sampel yang dapat Anda gunakan untuk membuat tabel. Ubah kueri untuk menentukan nama tabel dan kolom yang Anda ingin tabel Anda miliki.

  9. Setelah selesai memodifikasi kueri, pilih J alan kan untuk membuat tabel Anda.

    catatan
    • Jika Anda menerima kesalahan “Izin tidak memadai untuk menjalankan kueri. Kepala sekolah tidak memiliki hak istimewa apa pun pada sumber daya tertentu” ketika Anda mencoba menjalankan kueri di Athena, Anda harus diberikan izin Formasi Danau yang diperlukan di atas meja. Untuk informasi selengkapnya, lihat Memberikan izin Formasi Danau pada meja atau database.

    • Jika Anda menerima kesalahan “Iceberg tidak dapat mengakses sumber daya yang diminta” saat Anda mencoba menjalankan kueri di Athena, buka AWS Lake Formation konsol dan pastikan bahwa Anda telah memberikan izin pada katalog bucket tabel dan database (namespace) yang Anda buat. Jangan menentukan tabel saat memberikan izin ini. Untuk informasi selengkapnya, lihat Memberikan izin Formasi Danau pada meja atau database.

    • Jika Anda menerima pesan kesalahan berikut saat menjalankan SELECT kueri di Athena, pesan ini disebabkan oleh adanya huruf kapital dalam nama tabel atau nama kolom Anda dalam definisi tabel Anda: “GENERIC_INTERNAL_ERROR: Permintaan mendapatkan tabel gagal: com.amazonaws.services.glue.model. ValidationException: Sumber Daya Federasi tidak didukung - Nama tabel atau kolom tidak valid.” Pastikan bahwa nama tabel dan kolom Anda semuanya huruf kecil.

Jika pembuatan tabel Anda berhasil, nama tabel baru Anda muncul dalam daftar tabel di Athena. Saat Anda menavigasi kembali ke konsol Amazon S3, tabel baru Anda muncul di daftar Tabel di halaman detail bucket untuk bucket tabel Anda setelah Anda menyegarkan daftar.

Contoh ini menunjukkan cara membuat tabel dengan skema dengan menggunakan AWS CLI dan menentukan metadata tabel denganJSON. Untuk menggunakan contoh ini, ganti user input placeholdersdengan informasi Anda sendiri.

aws s3tables create-table --cli-input-json file://mytabledefinition.json

Untuk mytabledefinition.json file, gunakan contoh definisi tabel berikut. Untuk membuat tabel yang dipartisi, sertakan a partitionSpec dalam metadata tabel. Setiap bidang partisi mereferensikan kolom dalam skema Anda dengan itu sourceId dan menerapkan transformasi (seperti identitybucket,truncate,year,month,day,, atauhour) untuk menghasilkan nilai partisi. Karena bidang partisi mereferensikan kolom skema berdasarkan ID, Anda harus menetapkan eksplisit id untuk setiap bidang dalam skema Anda. Contoh berikut menetapkan ID ke bidang skema dan mempartisi tabel dengan registration_date kolom menggunakan day transformasi. Untuk menggunakan contoh ini, ganti user input placeholdersdengan informasi Anda sendiri.

{ "tableBucketARN": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket", "namespace": "your_namespace", "name": "example_table", "format": "ICEBERG", "metadata": { "iceberg": { "schema": { "fields": [ {"id": 1, "name": "id", "type": "int", "required": true}, {"id": 2, "name": "name", "type": "string"}, {"id": 3, "name": "registration_date", "type": "timestamp"} ] }, "partitionSpec": { "specId": 0, "fields": [ {"sourceId": 3, "transform": "day", "name": "registration_day"} ] } } } }

Anda dapat membuat tabel di mesin kueri yang didukung yang terhubung ke bucket tabel Anda, seperti dalam Apache Spark sesi di Amazon EMR.

Contoh berikut menunjukkan cara membuat tabel Spark dengan menggunakan CREATE pernyataan, dan menambahkan data tabel dengan menggunakan INSERT pernyataan atau dengan membaca data dari file yang ada. Untuk membuat tabel yang dipartisi, tambahkan PARTITIONED BY klausa ke CREATE pernyataan. Anda dapat mempartisi dengan satu atau lebih kolom secara langsung (partisi identitas) atau dengan menerapkan transformasi partisi sepertibucket,truncate,,years, monthsdays, atauhours. Contoh berikut mempartisi tabel dengan registration_date kolom menggunakan days transformasi. Untuk menggunakan contoh ini, ganti user input placeholdersdengan informasi Anda sendiri.

spark.sql( " CREATE TABLE IF NOT EXISTS s3tablesbucket.example_namespace.`example_table` ( id INT, name STRING, registration_date TIMESTAMP ) USING iceberg PARTITIONED BY (days(registration_date)) " )

Setelah Anda membuat tabel, Anda dapat memuat data ke dalam tabel. Pilih dari metode berikut:

  • Tambahkan data ke dalam tabel dengan menggunakan INSERT pernyataan.

    spark.sql( """ INSERT INTO s3tablesbucket.my_namespace.my_table VALUES (1, 'ABC', 100), (2, 'XYZ', 200) """)
  • Muat file data yang ada.

    1. Baca data ke dalamSpark:

      val data_file_location = "Path such as S3 URI to data file" val data_file = spark.read.parquet(data_file_location)
    2. Tulis data ke dalam Iceberg tabel:

      data_file.writeTo("s3tablesbucket.my_namespace.my_table").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()