Pilih preferensi cookie Anda

Kami menggunakan cookie penting serta alat serupa yang diperlukan untuk menyediakan situs dan layanan. Kami menggunakan cookie performa untuk mengumpulkan statistik anonim sehingga kami dapat memahami cara pelanggan menggunakan situs dan melakukan perbaikan. Cookie penting tidak dapat dinonaktifkan, tetapi Anda dapat mengklik “Kustom” atau “Tolak” untuk menolak cookie performa.

Jika Anda setuju, AWS dan pihak ketiga yang disetujui juga akan menggunakan cookie untuk menyediakan fitur situs yang berguna, mengingat preferensi Anda, dan menampilkan konten yang relevan, termasuk iklan yang relevan. Untuk menerima atau menolak semua cookie yang tidak penting, klik “Terima” atau “Tolak”. Untuk membuat pilihan yang lebih detail, klik “Kustomisasi”.

Buka CSV SerDe untuk memproses CSV

Mode fokus
Buka CSV SerDe untuk memproses CSV - Amazon Athena

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

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

Gunakan CSV Terbuka SerDe untuk membuat tabel Athena dari data yang dipisahkan koma (CSV) data.

Nama pustaka serialisasi

Nama pustaka serialisasi untuk Open CSV SerDe adalah. org.apache.hadoop.hive.serde2.OpenCSVSerde Untuk informasi kode sumber, lihat CSV SerDe di dokumentasi Apache.

Menggunakan CSV Terbuka SerDe

Untuk menggunakan ini SerDe, tentukan nama kelas yang sepenuhnya memenuhi syarat setelahnyaROW FORMAT SERDE. Juga tentukan pembatas di dalamnyaSERDEPROPERTIES, seperti pada contoh berikut.

... ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( "separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\" )

Abaikan header

Untuk mengabaikan header dalam data Anda ketika Anda mendefinisikan tabel, Anda dapat menggunakan properti skip.header.line.count tabel, seperti pada contoh berikut.

TBLPROPERTIES ("skip.header.line.count"="1")

Sebagai contoh, lihat CREATE TABLE pernyataan di Kueri log aliran VPC Amazon danKueri CloudFront log Amazon.

Pertimbangan untuk data string

CSV Terbuka SerDe memiliki karakteristik berikut untuk data string:

  • Menggunakan tanda kutip ganda (") sebagai karakter kutipan default, dan memungkinkan Anda menentukan karakter pemisah, kutipan, dan pelarian, seperti:

    WITH SERDEPROPERTIES ("separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\" )
  • Anda tidak dapat melarikan diri \t atau \n secara langsung. Untuk melarikan diri dari mereka, gunakan"escapeChar" = "\\". Sebagai contoh, lihat Example: Escaping \t or \n.

  • CSV Terbuka SerDe tidak mendukung jeda baris yang disematkan dalam file CSV.

Pertimbangan untuk data non-string

Untuk tipe data selainSTRING, CSV Terbuka SerDe berperilaku sebagai berikut:

  • MengenaliBOOLEAN,BIGINT,INT, dan tipe DOUBLE data.

  • Tidak mengenali nilai kosong atau nol dalam kolom yang didefinisikan sebagai tipe data numerik, meninggalkannya sebagai. string Salah satu solusinya adalah membuat kolom dengan nilai nol sebagai string dan kemudian digunakan CAST untuk mengonversi bidang dalam kueri menjadi tipe data numerik, memberikan nilai default untuk nol. 0 Untuk informasi lebih lanjut, lihat Ketika saya menanyakan data CSV di Athena, saya mendapatkan kesalahan HIVE_BAD_DATA: Error parsing field value in the Knowledge Center. AWS

  • Untuk kolom yang ditentukan dengan tipe timestamp data dalam CREATE TABLE pernyataan Anda, mengenali TIMESTAMP data jika ditentukan dalam format numerik UNIX dalam milidetik, seperti. 1579059880000 Sebagai contoh, lihat Example: Using the TIMESTAMP type and DATE type specified in the UNIX numeric format.

    • CSV Terbuka SerDe tidak mendukung TIMESTAMP dalam java.sql.Timestamp format yang sesuai dengan JDBC, seperti "YYYY-MM-DD HH:MM:SS.fffffffff" (presisi tempat desimal 9).

  • Untuk kolom yang ditentukan dengan tipe DATE data dalam CREATE TABLE pernyataan Anda, kenali nilai sebagai tanggal jika nilai mewakili jumlah hari yang telah berlalu sejak 1 Januari 1970. Misalnya, nilai 18276 dalam kolom dengan tipe date data dirender seperti 2020-01-15 saat ditanyakan. Dalam format UNIX ini, setiap hari dianggap memiliki 86.400 detik.

  • Untuk mengonversi kolom lebih lanjut ke jenis yang diinginkan dalam tabel, Anda dapat membuat tampilan di atas tabel dan menggunakannya CAST untuk mengonversi ke jenis yang diinginkan.

Contoh

contoh Contoh: Menanyakan data CSV sederhana

Contoh berikut mengasumsikan Anda memiliki data CSV yang disimpan di lokasi s3://amzn-s3-demo-bucket/mycsv/ dengan konten berikut:

"a1","a2","a3","a4" "1","2","abc","def" "a","a1","abc3","ab4"

Gunakan CREATE TABLE pernyataan untuk membuat tabel Athena berdasarkan data. Referensi OpenCSVSerde (perhatikan “d” dalam huruf kecil) setelah ROW FORMAT SERDE dan tentukan pemisah karakter, karakter kutipan, dan karakter escape diWITH SERDEPROPERTIES, seperti pada contoh berikut.

CREATE EXTERNAL TABLE myopencsvtable ( col1 string, col2 string, col3 string, col4 string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'separatorChar' = ',', 'quoteChar' = '"', 'escapeChar' = '\\' ) STORED AS TEXTFILE LOCATION 's3://amzn-s3-demo-bucket/mycsv/';

Kueri semua nilai dalam tabel:

SELECT * FROM myopencsvtable;

Query mengembalikan nilai-nilai berikut:

col1 col2 col3 col4 ----------------------------- a1 a2 a3 a4 1 2 abc def a a1 abc3 ab4
contoh Contoh: Menggunakan tipe TIMESTAMP dan tipe DATE yang ditentukan dalam format numerik UNIX

Pertimbangkan tiga kolom berikut dari data yang dipisahkan koma. Nilai-nilai di setiap kolom diapit tanda kutip ganda.

"unixvalue creationdate 18276 creationdatetime 1579059880000","18276","1579059880000"

Pernyataan berikut membuat tabel di Athena dari lokasi bucket Amazon S3 yang ditentukan.

CREATE EXTERNAL TABLE IF NOT EXISTS testtimestamp1( `profile_id` string, `creationdate` date, `creationdatetime` timestamp ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' LOCATION 's3://amzn-s3-demo-bucket'

Selanjutnya, jalankan query berikut:

SELECT * FROM testtimestamp1

Query mengembalikan hasil sebagai berikut, menunjukkan tanggal dan waktu data:

profile_id creationdate creationdatetime unixvalue creationdate 18276 creationdatetime 1579146280000 2020-01-15 2020-01-15 03:44:40.000
contoh Contoh: Melarikan diri\ t atau\n

Pertimbangkan data uji berikut:

" \\t\\t\\n 123 \\t\\t\\n ",abc " 456 ",xyz

Pernyataan berikut membuat tabel di Athena, menentukan itu. "escapeChar" = "\\"

CREATE EXTERNAL TABLE test1 ( f1 string, s2 string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ("separatorChar" = ",", "escapeChar" = "\\") LOCATION 's3://amzn-s3-demo-bucket/dataset/test1/'

Selanjutnya, jalankan query berikut:

SELECT * FROM test1;

Ia mengembalikan hasil ini, melarikan diri dengan benar \t atau\n:

f1 s2 \t\t\n 123 \t\t\n abc 456 xyz

Di halaman ini

PrivasiSyarat situsPreferensi cookie
© 2025, Amazon Web Services, Inc. atau afiliasinya. Semua hak dilindungi undang-undang.