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 . Untuk informasi selengkapnya, lihat ALTER TABLE DROP
PARTITION. table-name 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 lari
MSCK REPAIR TABLEpada tabel yang sama sampai semua partisi ditambahkan. Untuk informasi selengkapnya, lihat Partisi data Anda. -
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 menggunakan
s3protokol (misalnya,s3://amzn-s3-demo-bucket/). Di Athena, lokasi yang menggunakan protokol lain (contohnya,folder/s3a://) akan mengakibatkan kegagalan permintaan ketikabucket/folder/MSCK REPAIR TABLEquery dijalankan pada tabel yang mengandung. -
Karena
MSCK REPAIR TABLEmemindai 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 ins3://amzn-s3-demo-bucket1dan data untuk tabel 2 ins3://amzn-s3-demo-bucket1/table-2-data. Jika kedua tabel dipartisi oleh string,MSCK REPAIR TABLEakan menambahkan partisi untuk tabel 2 ke tabel 1. Untuk menghindari hal ini, gunakan struktur folder terpisah sepertis3://amzn-s3-demo-bucket1dans3://amzn-s3-demo-bucket2sebagai gantinya. Perhatikan bahwa perilaku ini konsisten dengan Amazon EMR dan Apache Hive. -
Karena masalah yang diketahui,
MSCK REPAIR TABLEgagal 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:BatchCreatePartitiontindakan. 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:DescribeJobUntuk contoh tindakan Amazon S3 yang memungkinkan, lihat kebijakan bucket contoh di Konfigurasikan akses lintas akun di Athena ke bucket Amazon S3. -
Casing kunci objek Amazon S3 — Pastikan jalur Amazon S3 dalam huruf kecil, bukan kotak unta (misalnya
userid, bukanuserId), atauALTER TABLE ADD PARTITIONgunakan untuk menentukan nama kunci objek. Untuk informasi selengkapnya, lihat Ubah atau definisikan ulang jalur Amazon S3 nanti dalam dokumen ini. -
Waktu habis kueri—
MSCK 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 TABLEmenjalankannya, Anda mungkin menerimapesan kesalahan Partisihilang 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 menentukanTableTypeproperti dan kemudian menjalankan kueri DDL sepertiSHOW CREATE TABLEatauMSCK REPAIR TABLE, Anda dapat menerima pesan kesalahanGAGAL: NullPointerExceptionNama adalah null.Untuk mengatasi kesalahan, tentukan nilai TableInput
TableTypeatribut sebagai bagian dari panggilan AWS GlueCreateTableAPI atau AWS CloudFormation templat. Nilai yang mungkin untukTableTypeincludeEXTERNAL_TABLEatauVIRTUAL_VIEW.Persyaratan ini hanya berlaku ketika Anda membuat tabel menggunakan operasi AWS Glue
CreateTableAPI atauAWS::Glue::Tabletemplate. Jika Anda membuat tabel untuk Athena menggunakan pernyataan DDL atau AWS Glue crawler,TableTypeproperti 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://amzn-s3-demo-bucket/path/userId=1/ s3://amzn-s3-demo-bucket/path/userId=2/ s3://amzn-s3-demo-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://amzn-s3-demo-bucket/path/userid=1/ s3://amzn-s3-demo-bucket/path/userid=2/ s3://amzn-s3-demo-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://amzn-s3-demo-bucket/path/userId=1/' PARTITION (userId=2) LOCATION 's3://amzn-s3-demo-bucket/path/userId=2/' PARTITION (userId=3) LOCATION 's3://amzn-s3-demo-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.