Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
CSV SerDe Zur Bearbeitung geöffnet CSV
Verwenden Sie Open CSV SerDe , um Athena-Tabellen aus kommagetrennten Datendaten () CSV zu erstellen.
Name der Serialisierungsbibliothek
Der Name der Serialisierungsbibliothek für Open CSV SerDe lautet. org.apache.hadoop.hive.serde2.OpenCSVSerde
Informationen zum Quellcode finden Sie CSV SerDe
Verwenden von Open CSV SerDe
Um dies zu verwenden SerDe, geben Sie danach den vollqualifizierten Klassennamen anROW FORMAT
SERDE
. Geben Sie auch die darin enthaltenen Trennzeichen anSERDEPROPERTIES
, wie im folgenden Beispiel.
... ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( "separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\" )
Überschriften ignorieren
Um Header in Ihren Daten beim Definieren einer Tabelle zu ignorieren, können Sie die Tabelleneigenschaft skip.header.line.count
wie im folgenden Beispiel verwenden.
TBLPROPERTIES ("skip.header.line.count"="1")
Beispiele finden Sie unter CREATE TABLE
-Anweisungen in VPCAmazon-Flow-Logs abfragen und CloudFront Amazon-Logs abfragen.
Überlegungen zu Zeichenkettendaten
Das Open CSV SerDe weist die folgenden Eigenschaften für Zeichenkettendaten auf:
-
Verwendet doppelte Anführungszeichen (
"
) als Standard-Anführungszeichen und ermöglicht es Ihnen, Trennzeichen, Anführungszeichen und Escape-Zeichen wie die Folgenden anzugeben:WITH SERDEPROPERTIES ("separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\" )
-
Sie können nicht entkommen
\t
oder\n
direkt. Um ein Escape dafür durchzuführen, verwenden Sie"escapeChar" = "\\"
. Ein Beispiel finden Sie unter Example: Escaping \t or \n. -
Open unterstützt CSV SerDe keine eingebetteten Zeilenumbrüche in CSV Dateien.
Überlegungen zu Daten, die keine Zeichenketten sind
Bei anderen Datentypen als CSV SerDe verhält STRING
sich Open wie folgt:
-
Erkennt
BOOLEAN
-,BIGINT
-,INT
- undDOUBLE
-Datentypen. -
Erkennt keine leeren oder Nullwerte in Spalten, die als numerischer Datentyp definiert sind, und belässt sie als
string
. Eine Problemumgehung besteht darin, die Spalte mit den Nullwerten alsstring
zu erstellen und dann mitCAST
das Feld in einer Abfrage in einen numerischen Datentyp zu konvertieren, wobei der Standardwert0
für Nullwerte bereitgestellt wird. Weitere Informationen finden Sie unter Wenn ich CSV Daten in Athena abfrage, erhalte ich den Fehler HIVE _ BAD _DATA: Fehler beim Parsen des Feldwertsim AWS Knowledge Center. -
Bei Spalten, die mit dem
timestamp
Datentyp in IhrerCREATE TABLE
Anweisung angegeben wurden,TIMESTAMP
werden Daten erkannt, wenn sie im UNIX numerischen Format in Millisekunden angegeben sind, z. B.1579059880000
Ein Beispiel finden Sie unter Example: Using the TIMESTAMP type and DATE type specified in the UNIX numeric format.-
Open unterstützt CSV SerDe
TIMESTAMP
kein JDBC -kompatiblesjava.sql.Timestamp
Format, wie z. B."YYYY-MM-DD HH:MM:SS.fffffffff"
(Genauigkeit mit 9 Dezimalstellen).
-
-
Erkennt für Spalten, die in Ihrer
CREATE TABLE
-Anweisung mit dem DatentypDATE
angegeben sind, Werte als Datumsangaben, wenn die Werte die Anzahl der Tage darstellen, die seit dem 1. Januar 1970 verstrichen sind. Beispielsweise wird der Wert18276
in einer Spalte mit dem Datentypdate
bei Abfrage als2020-01-15
gerendert. In diesem UNIX Format wird davon ausgegangen, dass jeder Tag 86.400 Sekunden hat.-
The Open CSV SerDe unterstützt kein anderes
DATE
Format direkt. Um Zeitstempeldaten in anderen Formaten zu verarbeiten, können Sie die Spalte alsstring
definieren und dann Zeitkonvertierungsfunktionen verwenden, um die gewünschten Ergebnisse in IhrerSELECT
-Abfrage zurückzugeben. Weitere Informationen finden Sie im Artikel Wenn ich eine Tabelle in Amazon Athena abfrage, ist das TIMESTAMP Ergebnis im AWS Knowledge Centerleer .
-
-
Um weitere Spalten in den gewünschten Typ in einer Tabelle umzuwandeln, können Sie eine Ansicht über die Tabelle erstellen und
CAST
für die Umwandlung in den gewünschten Typ verwenden.
Beispiele
Beispiel: Einfache Daten abfragen CSV
Im folgenden Beispiel wird davon ausgegangen, dass Sie an dem Speicherort CSV Daten s3://amzn-s3-demo-bucket/mycsv/
mit dem folgenden Inhalt gespeichert haben:
"a1","a2","a3","a4"
"1","2","abc","def"
"a","a1","abc3","ab4"
Verwenden Sie eine CREATE TABLE
-Anweisung, um eine Athena-Tabelle basierend auf den Daten zu erstellen. Verweisen Sie darauf OpenCSVSerde
(beachten Sie das „d“ in Kleinbuchstaben) ROW FORMAT SERDE
und geben Sie das Zeichentrennzeichen, das Anführungszeichen und das Escape-Zeichen in anWITH SERDEPROPERTIES
, wie im folgenden Beispiel.
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/';
Fragen Sie alle Werte in der Tabelle ab:
SELECT * FROM myopencsvtable;
Die Abfrage gibt die folgenden Werte zurück:
col1 col2 col3 col4
-----------------------------
a1 a2 a3 a4
1 2 abc def
a a1 abc3 ab4
Beispiel: Verwenden Sie den TIMESTAMP Typ und den DATE Typ, die im UNIX numerischen Format angegeben sind
Betrachten Sie die folgenden drei Spalten mit durch Kommas getrennten Daten. Die Werte in jeder Spalte sind in doppelten Anführungszeichen eingeschlossen.
"unixvalue creationdate 18276 creationdatetime 1579059880000","18276","1579059880000"
Über die folgende Anweisung wird eine Tabelle in Athena von dem angegebenen Amazon-S3-Bucket-Speicherort erstellt.
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'
Anschließen führen Sie die folgende Abfrage aus:
SELECT * FROM testtimestamp1
Die Abfrage gibt das folgende Ergebnis zurück, das die Datums- und Uhrzeitdaten zeigt:
profile_id creationdate creationdatetime unixvalue creationdate 18276 creationdatetime 1579146280000 2020-01-15 2020-01-15 03:44:40.000
Beispiel: Escaping\ t oder\n
Sehen Sie sich die folgenden Testdaten an:
" \\t\\t\\n 123 \\t\\t\\n ",abc " 456 ",xyz
Die folgende Anweisung erstellt eine Tabelle in Athena, mit "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/'
Anschließen führen Sie die folgende Abfrage aus:
SELECT * FROM test1;
Sie gibt das folgende Ergebnis zurück, wobei ein ordnungsgemäßes Escape für \t
oder \n
durchgeführt wird:
f1 s2 \t\t\n 123 \t\t\n abc 456 xyz