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 TABLE
perintah untuk memperbarui metadata dalam katalog setelah Anda menambahkan partisi kompatibel Hive.
ParameterMSCK REPAIR TABLE
perintah memindai sistem file seperti Amazon S3 untuk partisi kompatibel Hive yang ditambahkan ke sistem file setelah tabel dibuat.MSCK REPAIR TABLE
membandingkan 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 TABLE
sehingga Anda dapat mengkueri data di partisi baru dari Athena.
catatan
MSCK REPAIR TABLE
hanya 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 TABLE
pada 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
s3
protokol (misalnya,s3://amzn-s3-demo-bucket/
). Di Athena, lokasi yang menggunakan protokol lain (contohnya,folder
/s3a://
) akan mengakibatkan kegagalan permintaan ketikabucket
/folder
/MSCK REPAIR TABLE
query 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 ins3://amzn-s3-demo-bucket1
dan data untuk tabel 2 ins3://amzn-s3-demo-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 sepertis3://amzn-s3-demo-bucket1
dans3://amzn-s3-demo-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 TABLE
tidak 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 peran AWS Identity and Access Management (IAM) memiliki kebijakan yang memungkinkan
glue:BatchCreatePartition
tindakan. Untuk informasi selengkapnya, lihat Izinkan lem: BatchCreatePartition dalam IAM kebijakan 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 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 PARTITION
gunakan 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 TABLE
paling baik digunakan saat membuat tabel untuk pertama kalinya atau saat ada ketidakpastian tentang paritas antara data dan metadata partisi. Jika Anda menggunakanMSCK REPAIR TABLE
untuk 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 menerimapesan kesalahan Partisi
hilang dari sistem file. Ini terjadi karenaMSCK REPAIR TABLE
tidak menghapus partisi basi dari metadata tabel. Untuk menghapus partisi yang dihapus dari tabel metadata, jalankanALTER TABLE DROP PARTITIONSebagai gantinya Perhatikan bahwa SHOWPARTITIONSsama mencantumkan hanya partisi dalam metadata, bukan partisi dalam sistem file. -
Kesalahan "NullPointerException name is null”
Jika Anda menggunakan AWS Glue CreateTableAPIoperasi atau AWS CloudFormation
AWS::Glue::Table
template untuk membuat tabel untuk digunakan di Athena tanpa menentukanTableType
properti dan kemudian menjalankan DDL kueri sepertiSHOW CREATE TABLE
atauMSCK REPAIR TABLE
, Anda dapat menerima pesan galatFAILED: NullPointerException Nama
adalah null.Untuk mengatasi kesalahan, tentukan nilai untuk TableInput
TableType
atribut sebagai bagian dari AWS GlueCreateTable
API panggilan atau AWS CloudFormation templat. Nilai yang mungkin untukTableType
includeEXTERNAL_TABLE
atauVIRTUAL_VIEW
.Persyaratan ini hanya berlaku ketika Anda membuat tabel menggunakan AWS Glue
CreateTable
API operasi atauAWS::Glue::Table
template. Jika Anda membuat tabel untuk Athena menggunakan DDL pernyataan atau AWS Glue crawler,TableType
properti ditentukan untuk Anda secara otomatis.
Bagian berikut memberikan informasi tambahan.
Izinkan lem: BatchCreatePartition dalam IAM kebijakan
Tinjau IAM kebijakan yang dilampirkan pada peran yang Anda gunakan untuk menjalankanMSCK
REPAIR TABLE
. Saat Anda menggunakan AWS Glue Data Catalog dengan Athena, IAM kebijakan harus mengizinkan tindakan tersebut. glue:BatchCreatePartition
Untuk contoh IAM kebijakan yang memungkinkan glue:BatchCreatePartition
tindakan, 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.