Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Terbuka CSV SerDe untuk diproses CSV
Gunakan Buka CSV SerDe untuk membuat tabel Athena dari data yang dipisahkan koma () data. CSV
Nama pustaka serialisasi
Nama pustaka serialisasi untuk Open CSV SerDe adalahorg.apache.hadoop.hive.serde2.OpenCSVSerde
. Untuk informasi kode sumber, lihat CSV SerDe
Menggunakan Open CSV 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 Menanyakan log VPC aliran Amazon danMenanyakan log Amazon CloudFront .
Pertimbangan untuk data string
Terbuka CSV 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. -
Open CSV SerDe tidak mendukung jeda baris yang disematkan dalam CSV file.
Pertimbangan untuk data non-string
Untuk tipe data selainSTRING
, Open CSV SerDe berperilaku sebagai berikut:
-
Mengenali
BOOLEAN
,BIGINT
,INT
, dan tipeDOUBLE
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 sebagaistring
dan kemudian digunakanCAST
untuk mengonversi bidang dalam kueri menjadi tipe data numerik, memberikan nilai default untuk nol.0
Untuk informasi lebih lanjut, lihat Ketika saya menanyakan CSV data di Athena, saya mendapatkan kesalahan HIVE _ BAD _DATA: Nilai bidang penguraian kesalahan di PusatPengetahuan. AWS -
Untuk kolom yang ditentukan dengan tipe
timestamp
data dalamCREATE TABLE
pernyataan Anda, mengenaliTIMESTAMP
data jika ditentukan dalam format UNIX numerik dalam milidetik, seperti.1579059880000
Sebagai contoh, lihat Example: Using the TIMESTAMP type and DATE type specified in the UNIX numeric format.-
Open CSV SerDe tidak mendukung
TIMESTAMP
dalamjava.sql.Timestamp
format JDBC -compliant, seperti"YYYY-MM-DD HH:MM:SS.fffffffff"
(presisi tempat desimal 9).
-
-
Untuk kolom yang ditentukan dengan tipe
DATE
data dalamCREATE TABLE
pernyataan Anda, kenali nilai sebagai tanggal jika nilai mewakili jumlah hari yang telah berlalu sejak 1 Januari 1970. Misalnya, nilai18276
dalam kolom dengan tipedate
data dirender seperti2020-01-15
saat ditanyakan. Dalam UNIX format ini, setiap hari dianggap memiliki 86.400 detik.-
Open CSV SerDe tidak mendukung
DATE
dalam format lain secara langsung. Untuk memproses data stempel waktu dalam format lain, Anda dapat menentukan kolom sebagaistring
dan kemudian menggunakan fungsi konversi waktu untuk mengembalikan hasil yang diinginkan dalam kueri AndaSELECT
. Untuk informasi lebih lanjut, lihat artikel Ketika saya menanyakan tabel di Amazon Athena, TIMESTAMP hasilnya kosongdi pusat AWS pengetahuan .
-
-
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 sederhana CSV
Contoh berikut mengasumsikan Anda memiliki CSV data 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 TIMESTAMP jenis dan DATE jenis yang ditentukan dalam format UNIX numerik
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