Tabel eksternal untuk Redshift Spectrum - Amazon Redshift

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

Tabel eksternal untuk Redshift Spectrum

Topik ini menjelaskan cara membuat dan menggunakan tabel eksternal dengan Redshift Spectrum. Tabel eksternal adalah tabel yang Anda gunakan sebagai referensi untuk mengakses data di luar klaster Amazon Redshift Anda. Tabel ini berisi metadata tentang data eksternal yang dibaca Redshift Spectrum.

Anda membuat tabel eksternal dalam skema eksternal. Untuk membuat tabel eksternal, Anda harus menjadi pemilik skema eksternal atau superuser. Untuk mentransfer kepemilikan skema eksternal, gunakan ALTER SCHEMA untuk mengubah pemilik. Contoh berikut mengubah pemilik spectrum_schema skema menjadinewowner.

alter schema spectrum_schema owner to newowner;

Untuk menjalankan kueri Redshift Spectrum, Anda memerlukan izin berikut:

  • Izin penggunaan pada skema

  • Izin untuk membuat tabel sementara dalam database saat ini

Contoh berikut memberikan izin penggunaan pada skema spectrum_schema ke grup spectrumusers pengguna.

grant usage on schema spectrum_schema to group spectrumusers;

Contoh berikut memberikan izin sementara pada database spectrumdb ke grup spectrumusers pengguna.

grant temp on database spectrumdb to group spectrumusers;

Anda dapat membuat tabel eksternal di Amazon Redshift, Amazon Athena AWS Glue, atau metastore Apache Hive. Untuk informasi selengkapnya, lihat Memulai Penggunaan AWS Glue di Panduan AWS Glue Pengembang, Memulai di Panduan Pengguna Amazon Athena, atau Apache Hive di Panduan Pengembang Amazon. EMR

Jika tabel eksternal Anda didefinisikan dalam AWS Glue, Athena, atau metastore Hive, Anda terlebih dahulu membuat skema eksternal yang mereferensikan database eksternal. Kemudian Anda dapat mereferensikan tabel eksternal dalam SELECT pernyataan Anda dengan mengawali nama tabel dengan nama skema, tanpa perlu membuat tabel di Amazon Redshift. Untuk informasi selengkapnya, lihat Skema eksternal di Amazon Redshift Spectrum.

Untuk mengizinkan Amazon Redshift melihat tabel di AWS Glue Data Catalog, tambahkan glue:GetTable ke peran Amazon IAM Redshift. Jika tidak, Anda mungkin mendapatkan kesalahan yang mirip dengan berikut ini.

RedshiftIamRoleSession is not authorized to perform: glue:GetTable on resource: *;

Misalnya, Anda memiliki tabel eksternal bernama lineitem_athena didefinisikan dalam katalog eksternal Athena. Dalam hal ini, Anda dapat menentukan skema eksternal bernamaathena_schema, lalu kueri tabel menggunakan SELECT pernyataan berikut.

select count(*) from athena_schema.lineitem_athena;

Untuk menentukan tabel eksternal di Amazon Redshift, gunakan perintah. CREATE EXTERNAL TABLE Pernyataan tabel eksternal mendefinisikan kolom tabel, format file data Anda, dan lokasi data Anda di Amazon S3. Redshift Spectrum memindai file di folder yang ditentukan dan subfolder apa pun. Redshift Spectrum mengabaikan file dan file tersembunyi yang dimulai dengan titik, garis bawah, atau tanda hash (., _, atau #) atau diakhiri dengan tilde (~).

Contoh berikut membuat tabel bernama SALES dalam skema eksternal Amazon Redshift bernama. spectrum Data ada dalam file teks yang dibatasi tab.

create external table spectrum.sales( salesid integer, listid integer, sellerid integer, buyerid integer, eventid integer, dateid smallint, qtysold smallint, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp) row format delimited fields terminated by '\t' stored as textfile location 's3://redshift-downloads/tickit/spectrum/sales/' table properties ('numRows'='172000');

Untuk melihat tabel eksternal, kueri tampilan SVV_EXTERNAL_TABLES sistem.

Pseudokolom

Secara default, Amazon Redshift membuat tabel eksternal dengan pseudocolumns$path,, dan. $size $spectrum_oid Pilih $path kolom untuk melihat jalur ke file data di Amazon S3, dan pilih $size kolom untuk melihat ukuran file data untuk setiap baris yang dikembalikan oleh kueri. $spectrum_oidKolom menyediakan kemampuan untuk melakukan kueri berkorelasi dengan Redshift Spectrum. Sebagai contoh, lihat Contoh: Melakukan subkueri berkorelasi dalam Redshift Spectrum. Anda harus membatasi$path,$size, dan nama $spectrum_oid kolom dengan tanda kutip ganda. Klausa SELECT * tidak mengembalikan pseudocolumns. Anda harus secara eksplisit menyertakan$path,$size, dan nama $spectrum_oid kolom dalam kueri Anda, seperti yang ditunjukkan contoh berikut.

select "$path", "$size", "$spectrum_oid" from spectrum.sales_part where saledate = '2008-12-01';

Anda dapat menonaktifkan pembuatan pseudocolumns untuk sesi dengan menyetel parameter spectrum_enable_pseudo_columns konfigurasi ke. false Untuk informasi selengkapnya, lihat spectrum_enable_pseudo_columns. Anda juga dapat menonaktifkan hanya $spectrum_oid pseudocolumn dengan menyetel ke. enable_spectrum_oid false Untuk informasi selengkapnya, lihat enable_spectrum_oid. Namun, menonaktifkan $spectrum_oid pseudocolumn juga menonaktifkan dukungan untuk kueri berkorelasi dengan Redshift Spectrum.

penting

Memilih$size,$path, atau $spectrum_oid menimbulkan biaya karena Redshift Spectrum memindai file data di Amazon S3 untuk menentukan ukuran kumpulan hasil. Untuk informasi selengkapnya, lihat Harga Amazon Redshift.

Contoh pseudocolumns

Contoh berikut mengembalikan ukuran total file data terkait untuk tabel eksternal.

select distinct "$path", "$size" from spectrum.sales_part; $path | $size --------------------------------------------------------------------------+------- s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/ | 1616 s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/ | 1444 s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03/ | 1644

Mempartisi tabel eksternal Redshift Spectrum

Saat Anda mempartisi data Anda, Anda dapat membatasi jumlah data yang dipindai Redshift Spectrum dengan memfilter pada tombol partisi. Anda dapat mempartisi data Anda dengan kunci apa pun.

Praktik yang umum adalah mempartisi data berdasarkan waktu. Misalnya, Anda dapat memilih untuk mempartisi berdasarkan tahun, bulan, tanggal, dan jam. Jika Anda memiliki data yang berasal dari berbagai sumber, Anda dapat mempartisi dengan pengenal dan tanggal sumber data.

Prosedur berikut menjelaskan cara mempartisi data Anda.

Untuk mempartisi data Anda
  1. Simpan data Anda dalam folder di Amazon S3 sesuai dengan kunci partisi Anda.

    Buat satu folder untuk setiap nilai partisi dan beri nama folder dengan kunci dan nilai partisi. Misalnya, jika Anda mempartisi berdasarkan tanggal, Anda mungkin memiliki folder bernama saledate=2017-04-01saledate=2017-04-02,, dan sebagainya. Redshift Spectrum memindai file di folder partisi dan subfolder apa pun. Redshift Spectrum mengabaikan file dan file tersembunyi yang dimulai dengan titik, garis bawah, atau tanda hash (., _, atau #) atau diakhiri dengan tilde (~).

  2. Buat tabel eksternal dan tentukan kunci partisi dalam klausa PARTITIONED BY.

    Kunci partisi tidak bisa menjadi nama kolom tabel. Tipe data dapat berupaSMALLINT,INTEGER,BIGINT,DECIMAL,REAL,, DOUBLEPRECISION,BOOLEAN,CHAR,VARCHAR,DATE, atau tipe TIMESTAMP data.

  3. Tambahkan partisi.

    MenggunakanALTER TABLE... ADDPARTITION, tambahkan setiap partisi, tentukan kolom partisi dan nilai kunci, dan lokasi folder partisi di Amazon S3. Anda dapat menambahkan beberapa partisi dalam satu ALTERTABLE... ADD pernyataan. Contoh berikut menambahkan partisi untuk '2008-01' dan'2008-03'.

    alter table spectrum.sales_part add partition(saledate='2008-01-01') location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/' partition(saledate='2008-03-01') location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03/';
    catatan

    Jika Anda menggunakan AWS Glue katalog, Anda dapat menambahkan hingga 100 partisi menggunakan satu ALTER TABLE pernyataan.

Mempartisi contoh data

Dalam contoh ini, Anda membuat tabel eksternal yang dipartisi oleh kunci partisi tunggal dan tabel eksternal yang dipartisi oleh dua kunci partisi.

Data sampel untuk contoh ini terletak di bucket Amazon S3 yang memberikan akses baca ke semua pengguna yang diautentikasi AWS . Cluster Anda dan file data eksternal Anda harus sama Wilayah AWS. Bucket data sampel berada di Wilayah AS Timur (Virginia N.) (us-east-1). Untuk mengakses data menggunakan Redshift Spectrum, cluster Anda juga harus berada di us-east-1. Untuk membuat daftar folder di Amazon S3, jalankan perintah berikut.

aws s3 ls s3://redshift-downloads/tickit/spectrum/sales_partition/
PRE saledate=2008-01/
PRE saledate=2008-03/
PRE saledate=2008-04/
PRE saledate=2008-05/
PRE saledate=2008-06/
PRE saledate=2008-12/

Jika Anda belum memiliki skema eksternal, jalankan perintah berikut. Gantikan Amazon Resource Name (ARN) untuk peran AWS Identity and Access Management (IAM) Anda.

create external schema spectrum from data catalog database 'spectrumdb' iam_role 'arn:aws:iam::123456789012:role/myspectrumrole' create external database if not exists;

Contoh 1: Partisi dengan kunci partisi tunggal

Dalam contoh berikut, Anda membuat tabel eksternal yang dipartisi berdasarkan bulan.

Untuk membuat tabel eksternal yang dipartisi berdasarkan bulan, jalankan perintah berikut.

create external table spectrum.sales_part( salesid integer, listid integer, sellerid integer, buyerid integer, eventid integer, dateid smallint, qtysold smallint, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp) partitioned by (saledate char(10)) row format delimited fields terminated by '|' stored as textfile location 's3://redshift-downloads/tickit/spectrum/sales_partition/' table properties ('numRows'='172000');

Untuk menambahkan partisi, jalankan ALTER TABLE perintah berikut.

alter table spectrum.sales_part add partition(saledate='2008-01') location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/' partition(saledate='2008-03') location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03/' partition(saledate='2008-04') location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04/';

Untuk memilih data dari tabel yang dipartisi, jalankan kueri berikut.

select top 5 spectrum.sales_part.eventid, sum(spectrum.sales_part.pricepaid) from spectrum.sales_part, event where spectrum.sales_part.eventid = event.eventid and spectrum.sales_part.pricepaid > 30 and saledate = '2008-01' group by spectrum.sales_part.eventid order by 2 desc;
eventid | sum     
--------+---------
   4124 | 21179.00
   1924 | 20569.00
   2294 | 18830.00
   2260 | 17669.00
   6032 | 17265.00

Untuk melihat partisi tabel eksternal, kueri tampilan SVV_EXTERNAL_PARTITIONS sistem.

select schemaname, tablename, values, location from svv_external_partitions where tablename = 'sales_part';
schemaname | tablename  | values      | location                                                                
-----------+------------+-------------+-------------------------------------------------------------------------
spectrum   | sales_part | ["2008-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01
spectrum   | sales_part | ["2008-03"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03
spectrum   | sales_part | ["2008-04"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04

Contoh 2: Mempartisi dengan beberapa kunci partisi

Untuk membuat tabel eksternal yang dipartisi oleh date daneventid, jalankan perintah berikut.

create external table spectrum.sales_event( salesid integer, listid integer, sellerid integer, buyerid integer, eventid integer, dateid smallint, qtysold smallint, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp) partitioned by (salesmonth char(10), event integer) row format delimited fields terminated by '|' stored as textfile location 's3://redshift-downloads/tickit/spectrum/salesevent/' table properties ('numRows'='172000');

Untuk menambahkan partisi, jalankan ALTER TABLE perintah berikut.

alter table spectrum.sales_event add partition(salesmonth='2008-01', event='101') location 's3://redshift-downloads/tickit/spectrum/salesevent/salesmonth=2008-01/event=101/' partition(salesmonth='2008-01', event='102') location 's3://redshift-downloads/tickit/spectrum/salesevent/salesmonth=2008-01/event=102/' partition(salesmonth='2008-01', event='103') location 's3://redshift-downloads/tickit/spectrum/salesevent/salesmonth=2008-01/event=103/' partition(salesmonth='2008-02', event='101') location 's3://redshift-downloads/tickit/spectrum/salesevent/salesmonth=2008-02/event=101/' partition(salesmonth='2008-02', event='102') location 's3://redshift-downloads/tickit/spectrum/salesevent/salesmonth=2008-02/event=102/' partition(salesmonth='2008-02', event='103') location 's3://redshift-downloads/tickit/spectrum/salesevent/salesmonth=2008-02/event=103/' partition(salesmonth='2008-03', event='101') location 's3://redshift-downloads/tickit/spectrum/salesevent/salesmonth=2008-03/event=101/' partition(salesmonth='2008-03', event='102') location 's3://redshift-downloads/tickit/spectrum/salesevent/salesmonth=2008-03/event=102/' partition(salesmonth='2008-03', event='103') location 's3://redshift-downloads/tickit/spectrum/salesevent/salesmonth=2008-03/event=103/';

Jalankan query berikut untuk memilih data dari tabel dipartisi.

select spectrum.sales_event.salesmonth, event.eventname, sum(spectrum.sales_event.pricepaid) from spectrum.sales_event, event where spectrum.sales_event.eventid = event.eventid and salesmonth = '2008-02' and (event = '101' or event = '102' or event = '103') group by event.eventname, spectrum.sales_event.salesmonth order by 3 desc;
salesmonth | eventname       | sum    
-----------+-----------------+--------
2008-02    | The Magic Flute | 5062.00
2008-02    | La Sonnambula   | 3498.00
2008-02    | Die Walkure     |  534.00

Memetakan kolom tabel eksternal ke ORC kolom

Anda menggunakan tabel eksternal Amazon Redshift Spectrum untuk menanyakan data dari file ORC dalam format. Format kolom baris yang dioptimalkan adalah format file penyimpanan kolumnar yang mendukung struktur data bersarang. ORC Untuk informasi selengkapnya tentang menanyakan data bersarang, lihat Menanyakan Data Bersarang dengan Amazon Redshift Spectrum.

Saat Anda membuat tabel eksternal yang mereferensikan data dalam ORC file, Anda memetakan setiap kolom di tabel eksternal ke kolom dalam ORC data. Untuk melakukannya, Anda menggunakan salah satu metode berikut:

Pemetaan dengan nama kolom adalah default.

Pemetaan berdasarkan posisi

Dengan pemetaan posisi, kolom pertama yang ditentukan dalam tabel eksternal memetakan ke kolom pertama dalam file ORC data, kolom kedua ke yang kedua, dan seterusnya. Pemetaan berdasarkan posisi mengharuskan urutan kolom dalam tabel eksternal dan dalam ORC file cocok. Jika urutan kolom tidak cocok, maka Anda dapat memetakan kolom berdasarkan nama.

penting

Dalam rilis sebelumnya, Redshift Spectrum menggunakan pemetaan posisi secara default. Jika Anda perlu terus menggunakan pemetaan posisi untuk tabel yang ada, atur properti tabel orc.schema.resolution keposition, seperti yang ditunjukkan contoh berikut.

alter table spectrum.orc_example set table properties('orc.schema.resolution'='position');

Misalnya, tabel SPECTRUM.ORC_EXAMPLE didefinisikan sebagai berikut.

create external table spectrum.orc_example( int_col int, float_col float, nested_col struct< "int_col" : int, "map_col" : map<int, array<float >> > ) stored as orc location 's3://example/orc/files/';

Struktur tabel dapat diabstraksikan sebagai berikut.

• 'int_col' : int
• 'float_col' : float
• 'nested_col' : struct
   o 'int_col' : int
   o 'map_col' : map
      - key : int
      - value : array
         - value : float

ORCFile yang mendasari memiliki struktur file berikut.

• ORC file root(id = 0)
   o 'int_col' : int (id = 1)
   o 'float_col' : float (id = 2)
   o 'nested_col' : struct (id = 3)
      - 'int_col' : int (id = 4)
      - 'map_col' : map (id = 5)
         - key : int (id = 6)
         - value : array (id = 7)
            - value : float (id = 8)

Dalam contoh ini, Anda dapat memetakan setiap kolom di tabel eksternal ke kolom dalam ORC file secara ketat berdasarkan posisi. Berikut ini menunjukkan pemetaan.

Nama kolom tabel eksternal ORCID kolom ORCnama kolom
int_col 1 int_col
float_col 2 float_col
nested_col 3 nested_col
nested_col.int_col 4 int_col
nested_col.map_col 5 map_col
nested_col.map_col.key 6 TA
nested_col.map_col.value 7 TA
nested_col.map_col.value.item 8 TA

Pemetaan dengan nama kolom

Menggunakan pemetaan nama, Anda memetakan kolom dalam tabel eksternal ke kolom bernama dalam ORC file pada tingkat yang sama, dengan nama yang sama.

Misalnya, misalkan Anda ingin memetakan tabel dari contoh sebelumnyaSPECTRUM.ORC_EXAMPLE, dengan ORC file yang menggunakan struktur file berikut.

• ORC file root(id = 0)
   o 'nested_col' : struct (id = 1)
      - 'map_col' : map (id = 2)
         - key : int (id = 3)
         - value : array (id = 4)
            - value : float (id = 5)
      - 'int_col' : int (id = 6)
   o 'int_col' : int (id = 7)
   o 'float_col' : float (id = 8)

Menggunakan pemetaan posisi, Redshift Spectrum mencoba pemetaan berikut.

Nama kolom tabel eksternal ORCID kolom ORCnama kolom
int_col 1 struct
float_col 7 int_col
nested_col 8 float_col

Saat Anda menanyakan tabel dengan pemetaan posisi sebelumnya, SELECT perintah gagal pada validasi tipe karena strukturnya berbeda.

Anda dapat memetakan tabel eksternal yang sama ke kedua struktur file yang ditunjukkan pada contoh sebelumnya dengan menggunakan pemetaan nama kolom. Kolom tabel int_colfloat_col,, dan nested_col peta dengan nama kolom ke kolom dengan nama yang sama dalam ORC file. Kolom yang dinamai nested_col dalam tabel eksternal adalah struct kolom dengan subkolom bernama map_col danint_col. Subkolom juga memetakan dengan benar ke kolom yang sesuai dalam ORC file dengan nama kolom.

Membuat tabel eksternal untuk data yang dikelola di Apache Hudi

Untuk kueri data dalam format Apache Hudi Copy On Write (CoW), Anda dapat menggunakan tabel eksternal Amazon Redshift Spectrum. Tabel Hudi Copy On Write adalah kumpulan file Apache Parquet yang disimpan di Amazon S3. Anda dapat membaca tabel Copy On Write (CoW) di Apache Hudi versi 0.5.2, 0.6.0, 0.7.0, 0.8.0, 0.9.0, 0.10.0, 0.10.1, 0.11.0, dan 0.11.1 yang dibuat dan dimodifikasi dengan operasi insert, delete, dan upsert write. Misalnya, tabel bootstrap tidak didukung. Untuk informasi selengkapnya, lihat Menyalin Tabel Tulis di dokumentasi Apache Hudi open source.

Saat Anda membuat tabel eksternal yang mereferensikan data dalam format Hudi CoW, Anda memetakan setiap kolom di tabel eksternal ke kolom dalam data Hudi. Pemetaan dilakukan dengan kolom.

Pernyataan bahasa definisi data (DDL) untuk tabel Hudi yang dipartisi dan tidak dipartisi mirip dengan yang untuk format file Apache Parquet lainnya. Untuk tabel Hudi, Anda mendefinisikan INPUTFORMAT sebagaiorg.apache.hudi.hadoop.HoodieParquetInputFormat. LOCATIONParameter harus menunjuk ke folder dasar tabel Hudi yang berisi .hoodie folder, yang diperlukan untuk menetapkan timeline komit Hudi. Dalam beberapa kasus, SELECT operasi pada tabel Hudi mungkin gagal dengan pesan Tidak ditemukan timeline komit Hudi yang valid. Jika demikian, periksa apakah .hoodie folder tersebut berada di lokasi yang benar dan berisi timeline komit Hudi yang valid.

catatan

Format Apache Hudi hanya didukung saat Anda menggunakan file. AWS Glue Data Catalog Ini tidak didukung ketika Anda menggunakan metastore Apache Hive sebagai katalog eksternal.

DDLUntuk mendefinisikan tabel yang tidak dipartisi memiliki format berikut.

CREATE EXTERNAL TABLE tbl_name (columns) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://s3-bucket/prefix'

DDLUntuk mendefinisikan tabel dipartisi memiliki format berikut.

CREATE EXTERNAL TABLE tbl_name (columns) PARTITIONED BY(pcolumn1 pcolumn1-type[,...]) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://s3-bucket/prefix'

Untuk menambahkan partisi ke tabel Hudi yang dipartisi, jalankan ALTER TABLE ADD PARTITION perintah di mana LOCATION parameter menunjuk ke subfolder Amazon S3 dengan file milik partisi.

Partisi DDL untuk menambahkan memiliki format berikut.

ALTER TABLE tbl_name ADD IF NOT EXISTS PARTITION(pcolumn1=pvalue1[,...]) LOCATION 's3://s3-bucket/prefix/partition-path'

Membuat tabel eksternal untuk data yang dikelola di Delta Lake

Untuk menanyakan data dalam tabel Delta Lake, Anda dapat menggunakan tabel eksternal Amazon Redshift Spectrum.

Untuk mengakses tabel Delta Lake dari Redshift Spectrum, buat manifes sebelum kueri. Manifes Delta Lake berisi daftar file yang membentuk snapshot yang konsisten dari tabel Delta Lake. Dalam tabel yang dipartisi, ada satu manifes per partisi. Tabel Delta Lake adalah kumpulan file Apache Parquet yang disimpan di Amazon S3. Untuk informasi lebih lanjut, lihat Delta Lake di dokumentasi Delta Lake open source.

Saat Anda membuat tabel eksternal yang mereferensikan data dalam tabel Delta Lake, Anda memetakan setiap kolom di tabel eksternal ke kolom di tabel Delta Lake. Pemetaan dilakukan dengan nama kolom.

Tabel Delta Lake DDL untuk dipartisi dan tidak dipartisi mirip dengan yang untuk format file Apache Parquet lainnya. Untuk tabel Delta Lake, Anda mendefinisikan INPUTFORMAT sebagai org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat dan OUTPUTFORMAT asorg.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat. LOCATIONParameter harus menunjuk ke folder manifes di folder dasar tabel. Jika SELECT operasi di meja Danau Delta gagal, untuk alasan yang mungkin lihatKeterbatasan dan pemecahan masalah untuk tabel Delta Lake.

DDLUntuk mendefinisikan tabel yang tidak dipartisi memiliki format berikut.

CREATE EXTERNAL TABLE tbl_name (columns) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://s3-bucket/prefix/_symlink_format_manifest'

DDLUntuk mendefinisikan tabel dipartisi memiliki format berikut.

CREATE EXTERNAL TABLE tbl_name (columns) PARTITIONED BY(pcolumn1 pcolumn1-type[,...]) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://s3-bucket>/prefix/_symlink_format_manifest'

Untuk menambahkan partisi ke tabel Delta Lake yang dipartisi, jalankan ALTER TABLE ADD PARTITION perintah di mana LOCATION parameter menunjuk ke subfolder Amazon S3 yang berisi manifes untuk partisi.

Partisi DDL untuk menambahkan memiliki format berikut.

ALTER TABLE tbl_name ADD IF NOT EXISTS PARTITION(pcolumn1=pvalue1[,...]) LOCATION 's3://s3-bucket/prefix/_symlink_format_manifest/partition-path'

Atau jalankan poin DDL itu langsung ke file manifes Delta Lake.

ALTER TABLE tbl_name ADD IF NOT EXISTS PARTITION(pcolumn1=pvalue1[,...]) LOCATION 's3://s3-bucket/prefix/_symlink_format_manifest/partition-path/manifest'

Keterbatasan dan pemecahan masalah untuk tabel Delta Lake

Pertimbangkan hal berikut saat menanyakan tabel Delta Lake dari Redshift Spectrum:

  • Jika manifes menunjuk ke snapshot atau partisi yang tidak ada lagi, kueri gagal hingga manifes baru yang valid telah dibuat. Misalnya, ini mungkin hasil dari VACUUM operasi pada tabel yang mendasarinya,

  • Manifestasi Danau Delta hanya memberikan konsistensi tingkat partisi.

Tabel berikut menjelaskan beberapa alasan potensial untuk kesalahan tertentu saat Anda menanyakan tabel Delta Lake.

Pesan kesalahan Kemungkinan alasannya

Manifes Delta Lake di bucket s3-bucket-1 tidak dapat berisi entri di bucket s3-bucket-2.

Entri manifes mengarah ke file di bucket Amazon S3 yang berbeda dari yang ditentukan.

File Delta Lake diharapkan berada di folder yang sama.

Entri manifes mengarah ke file yang memiliki awalan Amazon S3 berbeda dari yang ditentukan.

Nama file yang tercantum dalam jalur manifes Delta Lake tidak ditemukan.

File yang tercantum dalam manifes tidak ditemukan di Amazon S3.

Kesalahan saat mengambil manifes Delta Lake.

Manifes tidak ditemukan di Amazon S3.

Jalur S3 Tidak Valid.

Entri dalam file manifes bukan jalur Amazon S3 yang valid, atau file manifes telah rusak.