MSCK REPAIR TABLE - Amazon Athena

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

MSCK REPAIR TABLE

GunakanMSCK REPAIR TABLEperintah untuk memperbarui metadata dalam katalog setelah Anda menambahkan partisi kompatibel Hive.

ParameterMSCK REPAIR TABLEperintah memindai sistem file seperti Amazon S3 untuk partisi kompatibel Hive yang ditambahkan ke sistem file setelah tabel dibuat.MSCK REPAIR TABLEmembandingkan partisi dalam metadata tabel dan partisi di S3. Jika partisi baru hadir di lokasi S3 yang Anda tentukan saat Anda membuat tabel, itu menambahkan partisi tersebut metadata dan tabel Athena.

Saat Anda menambahkan partisi fisik, metadata dalam katalog menjadi tidak konsisten dengan tata letak data dalam sistem file, dan informasi tentang partisi baru perlu ditambahkan ke katalog. Untuk memperbarui metadata, jalankanMSCK REPAIR TABLEsehingga Anda dapat mengkueri data di partisi baru dari Athena.

catatan

MSCK REPAIR TABLEhanya menambahkan partisi ke metadata; itu tidak menghapusnya. Untuk menghapus partisi dari metadata setelah partisi dihapus secara manual di Amazon S3, jalankan perintahALTER TABLE table-name DROP PARTITION. Untuk informasi selengkapnya, lihat ALTER TABLE DROP PARTITION.

Pertimbangan dan batasan

Saat menggunakanMSCK REPAIR TABLE, ingatlah poin-poin berikut:

  • Ini dimungkinkan akan memakan waktu untuk menambahkan semua partisi. Jika operasi ini kali keluar, itu akan berada dalam keadaan tidak lengkap tempat hanya beberapa partisi ditambahkan ke katalog. Kau harus lariMSCK REPAIR TABLEpada tabel yang sama sampai semua partisi ditambahkan. Untuk informasi selengkapnya, lihat Partisi data di Athena.

  • Untuk partisi yang tidak kompatibel dengan Hive, gunakanALTER TABLE ADD PARTITIONuntuk memuat partisi sehingga Anda dapat mengkueri data mereka.

  • Lokasi partisi yang akan digunakan dengan Athena harus menggunakans3protokol (misalnya,s3://DOC-EXAMPLE-BUCKET/folder/). Di Athena, lokasi yang menggunakan protokol lain (contohnya,s3a://bucket/folder/) akan mengakibatkan kegagalan permintaan ketikaMSCK REPAIR TABLEquery dijalankan pada tabel yang mengandung.

  • Karena MSCK REPAIR TABLE memindai folder dan subfoldernya untuk menemukan skema partisi yang cocok, pastikan untuk menyimpan data untuk tabel terpisah dalam hierarki folder terpisah. Misalnya, Anda memiliki data untuk tabel 1 in s3://DOC-EXAMPLE-BUCKET1 dan data untuk tabel 2 ins3://DOC-EXAMPLE-BUCKET1/table-2-data. Jika kedua tabel dipartisi oleh string, MSCK REPAIR TABLE akan menambahkan partisi untuk tabel 2 ke tabel 1. Untuk menghindari hal ini, gunakan struktur folder terpisah seperti s3://DOC-EXAMPLE-BUCKET1 dan s3://DOC-EXAMPLE-BUCKET2 sebagai gantinya. Perhatikan bahwa perilaku ini konsisten dengan Amazon EMR dan Apache Hive.

  • Karena masalah yang diketahui, MSCK REPAIR TABLE gagal secara diam-diam ketika nilai partisi berisi karakter titik dua (:) (misalnya, ketika nilai partisi adalah stempel waktu). Sebagai solusinya, gunakan. ALTER TABLE ADD PARTITION

  • MSCK REPAIR TABLEtidak menambahkan nama kolom partisi yang dimulai dengan garis bawah (_). Untuk mengatasi batasan ini, gunakanALTER TABLE ADD PARTITION.

Sinopsis

MSCK REPAIR TABLE table_name

Contoh

MSCK REPAIR TABLE orders;

Pemecahan Masalah

Setelah Anda menjalankanMSCK REPAIR TABLE, jika Athena tidak menambahkan partisi ke tabel di AWS Glue Data Catalog, periksa yang berikut ini:

  • AWS Glue akses — Pastikan bahwa peran AWS Identity and Access Management (IAM) memiliki kebijakan yang memungkinkan glue:BatchCreatePartition tindakan. Untuk informasi selengkapnya, lihat Izinkan lem: BatchCreatePartition dalam kebijakan IAM nanti dalam dokumen ini.

  • Akses Amazon S3 — Pastikan peran tersebut memiliki kebijakan dengan izin yang memadai untuk mengakses Amazon S3, termasuk tindakannya. s3:DescribeJob Untuk contoh tindakan Amazon S3 yang memungkinkan, lihat kebijakan bucket contoh di Akses lintas akun di Athena ke ember Amazon S3.

  • Casing kunci objek Amazon S3 — Pastikan jalur Amazon S3 dalam huruf kecil, bukan kotak unta (misalnyauserid, bukanuserId), atau ALTER TABLE ADD PARTITION gunakan untuk menentukan nama kunci objek. Untuk informasi selengkapnya, lihat Ubah atau definisikan ulang jalur Amazon S3 nanti dalam dokumen ini.

  • Waktu habis kueriMSCK REPAIR TABLEpaling baik digunakan saat membuat tabel untuk pertama kalinya atau saat ada ketidakpastian tentang paritas antara data dan metadata partisi. Jika Anda menggunakanMSCK REPAIR TABLEuntuk sering menambahkan partisi baru (misalnya, setiap hari) dan mengalami timeout kueri, pertimbangkan untuk menggunakanALTER TABLE ADD PARTITION.

  • Partisi hilang dari sistem file - Jika Anda menghapus partisi secara manual di Amazon S3 dan kemudian MSCK REPAIR TABLE menjalankannya, Anda mungkin menerima pesan kesalahan Partisi hilang dari sistem file. Ini terjadi karenaMSCK REPAIR TABLEtidak menghapus partisi basi dari metadata tabel. Untuk menghapus partisi yang dihapus dari tabel metadata, jalankanALTER TABLE DROP PARTITIONSebagai gantinya Perhatikan bahwaTAMPILKAN PARTISIjuga hanya mencantumkan partisi dalam metadata, bukan partisi dalam sistem file.

  • Kesalahan "NullPointerException name is null”

    Jika Anda menggunakan operasi AWS Glue CreateTableAPI atau AWS CloudFormation AWS::Glue::Tabletemplate untuk membuat tabel untuk digunakan di Athena tanpa menentukan TableType properti dan kemudian menjalankan kueri DDL seperti SHOW CREATE TABLE atauMSCK REPAIR TABLE, Anda dapat menerima pesan kesalahan GAGAL: NullPointerException Nama adalah null.

    Untuk mengatasi kesalahan, tentukan nilai TableInputTableTypeatribut sebagai bagian dari panggilan AWS Glue CreateTable API atau AWS CloudFormation templat. Nilai yang mungkin untuk TableType include EXTERNAL_TABLE atauVIRTUAL_VIEW.

    Persyaratan ini hanya berlaku ketika Anda membuat tabel menggunakan operasi AWS Glue CreateTable API atau AWS::Glue::Table template. Jika Anda membuat tabel untuk Athena menggunakan pernyataan DDL atau AWS Glue crawler, TableType properti didefinisikan untuk Anda secara otomatis.

Bagian berikut memberikan informasi tambahan.

Izinkan lem: BatchCreatePartition dalam kebijakan IAM

Tinjau kebijakan IAM yang dilampirkan pada peran yang Anda gunakan untuk menjalankanMSCK REPAIR TABLE. Saat Anda menggunakan AWS Glue Data Catalog dengan Athena, kebijakan IAM harus mengizinkan tindakan tersebut. glue:BatchCreatePartition Untuk contoh kebijakan IAM yang memungkinkanglue:BatchCreatePartitiontindakan, lihatAWS kebijakan terkelola: AmazonAthenaFullAccess.

Ubah atau definisikan ulang jalur Amazon S3

Jika satu atau beberapa kunci objek di jalur Amazon S3 berada dalam huruf unta, bukan huruf kecil, MSCK REPAIR TABLE mungkin tidak menambahkan partisi ke file. AWS Glue Data Catalog Misalnya, jika jalur Amazon S3 Anda menyertakan nama kunci objekuserId, partisi berikut mungkin tidak ditambahkan ke: AWS Glue Data Catalog

s3://DOC-EXAMPLE-BUCKET/path/userId=1/ s3://DOC-EXAMPLE-BUCKET/path/userId=2/ s3://DOC-EXAMPLE-BUCKET/path/userId=3/

Untuk mengatasi masalah ini, lakukan salah satu hal berikut:

  • Gunakan huruf kecil alih-alih casing unta saat Anda membuat kunci objek Amazon S3:

    s3://DOC-EXAMPLE-BUCKET/path/userid=1/ s3://DOC-EXAMPLE-BUCKET/path/userid=2/ s3://DOC-EXAMPLE-BUCKET/path/userid=3/
  • Gunakan ALTER TABLE ADD PARTITION untuk mendefinisikan ulang lokasi, seperti pada contoh berikut:

    ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (userId=1) LOCATION 's3://DOC-EXAMPLE-BUCKET/path/userId=1/' PARTITION (userId=2) LOCATION 's3://DOC-EXAMPLE-BUCKET/path/userId=2/' PARTITION (userId=3) LOCATION 's3://DOC-EXAMPLE-BUCKET/path/userId=3/'

Perhatikan bahwa meskipun nama kunci objek Amazon S3 dapat menggunakan huruf besar, nama bucket Amazon S3 itu sendiri harus selalu dalam huruf kecil. Untuk informasi selengkapnya, lihat Pedoman penamaan kunci objek dan aturan penamaan Bucket di Panduan Pengguna Amazon S3.