COPYBeispiele - Amazon Redshift

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.

COPYBeispiele

Anmerkung

In den folgenden Beispielen werden aus Gründen der Lesbarkeit Zeilenumbrüche verwendet. Verwenden Sie in Ihrer Zeichenfolge credentials-args keine Zeilenumbrüche oder Leerzeichen.

FAVORITEMOVIESAus einer DynamoDB-Tabelle laden

Das Tool AWS SDKsenthalten ein einfaches Beispiel für die Erstellung einer DynamoDB-Tabelle namens Movies. (Informationen zu diesem Beispiel finden Sie unter Erste Schritte mit DynamoDB.) Im folgenden Beispiel wird die Amazon Redshift MOVIES Redshift-Tabelle mit Daten aus der DynamoDB-Tabelle geladen. Die Amazon-Redshift-Tabelle muss in der Datenbank bereits vorhanden sein.

copy favoritemovies from 'dynamodb://Movies' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' readratio 50;

LISTINGAus einem Amazon S3 S3-Bucket laden

Das folgende Beispiel wird LISTING aus einem Amazon S3 S3-Bucket geladen. Der COPY Befehl lädt alle Dateien im /data/listing/ Ordner.

copy listing from 's3://amzn-s3-demo-bucket/data/listing/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

LISTINGAus einem EMR Amazon-Cluster laden

Im folgenden Beispiel wird die SALES Tabelle mit tabulatorgetrennten Daten aus lzop-komprimierten Dateien in einem Amazon-Cluster geladen. EMR COPYlädt jede Datei in dem Ordner, der mit beginnt. myoutput/ part-

copy sales from 'emr://j-SAMPLE2B500FC/myoutput/part-*' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter '\t' lzop;

Im folgenden Beispiel wird die SALES Tabelle mit JSON formatierten Daten in einen EMR Amazon-Cluster geladen. COPYlädt jede Datei im myoutput/json/ Ordner.

copy sales from 'emr://j-SAMPLE2B500FC/myoutput/json/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' JSON 's3://amzn-s3-demo-bucket/jsonpaths.txt';

Verwenden eines Manifests für die Angabe von Datendateien

Sie können ein Manifest verwenden, um sicherzustellen, dass Ihr COPY Befehl alle erforderlichen Dateien und nur die erforderlichen Dateien aus Amazon S3 lädt. Sie können ein Manifest auch verwenden, wenn Sie mehrere Dateien aus verschiedenen Buckets laden müssen oder Dateien, die nicht dasselbe Präfix besitzen.

Angenommen, Sie müssen die folgenden drei Dateien laden: custdata1.txt, custdata2.txt und custdata3.txt. Sie könnten den folgenden Befehl verwenden, um alle Dateien in amzn-s3-demo-bucket zu laden, die mit custdata beginnen, indem Sie ein Präfix angeben:

copy category from 's3://amzn-s3-demo-bucket/custdata' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

Wenn aufgrund eines Fehlers nur zwei der Dateien vorhanden sind, werden nur diese beiden Dateien COPY geladen und der Vorgang erfolgreich abgeschlossen, was zu einem unvollständigen Datenladevorgang führt. Wenn der Bucket auch eine unerwünschte Datei enthält, die zufällig dasselbe Präfix verwendet, wie z. B. eine Datei mit dem Namencustdata.backup, wird diese Datei ebenfalls COPY geladen, was dazu führt, dass unerwünschte Daten geladen werden.

Um sicherzustellen, dass alle erforderlichen Dateien geladen werden, und zu verhindern, dass nicht erwünschte Dateien geladen werden, können Sie eine Manifestdatei verwenden. Das Manifest ist eine Textdatei im JSON -Format, die die Dateien auflistet, die mit dem Befehl verarbeitet werden sollen. COPY Beispielsweise lädt das folgende Manifest die drei Dateien aus dem vorherigen Beispiel.

{ "entries":[ { "url":"s3://amzn-s3-demo-bucket/custdata.1", "mandatory":true }, { "url":"s3://amzn-s3-demo-bucket/custdata.2", "mandatory":true }, { "url":"s3://amzn-s3-demo-bucket/custdata.3", "mandatory":true } ] }

Das optionale mandatory Flag gibt an, ob der COPY Vorgang beendet werden soll, wenn die Datei nicht existiert. Der Standardwert ist false. Wird unabhängig von den obligatorischen Einstellungen COPY beendet, wenn keine Dateien gefunden werden. In diesem Beispiel wird ein Fehler COPY zurückgegeben, wenn eine der Dateien nicht gefunden wurde. Nicht erwünschte Dateien, die möglicherweise geladen werden, wenn Sie nur ein Schlüsselpräfix angeben, beispielsweise custdata.backup, werden ignoriert, da sie nicht im Manifest aufgelistet werden.

Beim Laden aus Datendateien im ORC oder Parquet-Format ist ein meta Feld erforderlich, wie im folgenden Beispiel gezeigt.

{ "entries":[ { "url":"s3://amzn-s3-demo-bucket1/orc/2013-10-04-custdata", "mandatory":true, "meta":{ "content_length":99 } }, { "url":"s3://amzn-s3-demo-bucket2/orc/2013-10-05-custdata", "mandatory":true, "meta":{ "content_length":99 } } ] }

Im folgenden Beispiel wird ein Manifest namens verwendet cust.manifest.

copy customer from 's3://amzn-s3-demo-bucket/cust.manifest' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' format as orc manifest;

Sie können ein Manifest verwenden, um Dateien aus verschiedenen Buckets hochzuladen oder Dateien, die nicht das gleiche Präfix verwenden. Das folgende Beispiel zeigtJSON, wie Daten mit Dateien geladen werden, deren Namen mit einem Datumsstempel beginnen.

{ "entries": [ {"url":"s3://amzn-s3-demo-bucket/2013-10-04-custdata.txt","mandatory":true}, {"url":"s3://amzn-s3-demo-bucket/2013-10-05-custdata.txt","mandatory":true}, {"url":"s3://amzn-s3-demo-bucket/2013-10-06-custdata.txt","mandatory":true}, {"url":"s3://amzn-s3-demo-bucket/2013-10-07-custdata.txt","mandatory":true} ] }

Das Manifest kann Dateien auflisten, die sich in unterschiedlichen Buckets befinden, sofern sich die Buckets in denselben Buckets befinden AWS Region wie der Cluster.

{ "entries": [ {"url":"s3://amzn-s3-demo-bucket1/custdata1.txt","mandatory":false}, {"url":"s3://amzn-s3-demo-bucket2/custdata1.txt","mandatory":false}, {"url":"s3://amzn-s3-demo-bucket2/custdata2.txt","mandatory":false} ] }

LISTINGAus einer durch Leerzeichen getrennten Datei laden (Standardtrennzeichen)

Das folgende Beispiel stellt einen sehr einfachen Fall dar, in dem keine Optionen angegeben sind und die Eingabedatei das Standardtrennzeichen enthält, ein Pipe-Zeichen (|).

copy listing from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

Mit spaltenförmigen Daten im Parquet-Format laden LISTING

Im folgenden Beispiel werden Daten aus einem Ordner in einem von Amazon S3 benannten Parquet geladen.

copy listing from 's3://amzn-s3-demo-bucket/data/listings/parquet/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' format as parquet;

LISTINGMithilfe von spaltenförmigen Daten im Format laden ORC

Im folgenden Beispiel werden Daten aus einem Ordner in Amazon S3 mit dem Namen orc geladen.

copy listing from 's3://amzn-s3-demo-bucket/data/listings/orc/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' format as orc;

EVENTMit Optionen laden

Im folgenden Beispiel werden durch Pipen getrennte Daten in die EVENT Tabelle geladen und die folgenden Regeln angewendet:

  • Wenn Zeichenfolgen durch Paare von Angebotszeichen eingeschlossen werden, werden sie entfernt.

  • Sowohl leere Zeichenketten als auch Zeichenketten, die Leerzeichen enthalten, werden als Werte geladen. NULL

  • Der Ladevorgang schlägt fehl, wenn mehr als 5 Fehler zurückgegeben werden.

  • Zeitstempelwerte müssen das angegebene Format einhalten. Ein gültiger Zeitstempel ist beispielsweise 2008-09-26 05:43:12.

copy event from 's3://amzn-s3-demo-bucket/data/allevents_pipe.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' removequotes emptyasnull blanksasnull maxerror 5 delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS';

VENUEAus einer Datendatei mit fester Breite laden

copy venue from 's3://amzn-s3-demo-bucket/data/venue_fw.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' fixedwidth 'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6';

Im vorherigen Beispiel wird angenommen, dass die Datendatei auf dieselbe Weise wie die gezeigten Beispieldateien formatiert ist. Im folgenden Beispiel dienen Leerzeichen als Platzhalter, sodass alle Spalten dieselbe Breite wie in der Spezifikation angegeben haben:

1 Toyota Park Bridgeview IL0 2 Columbus Crew Stadium Columbus OH0 3 RFK Stadium Washington DC0 4 CommunityAmerica BallparkKansas City KS0 5 Gillette Stadium Foxborough MA68756

CATEGORYAus einer Datei laden CSV

Angenommen, Sie möchten das CATEGORY mit den in der folgenden Tabelle angegebenen Werten laden.

catid catgroup catname catdesc
12 Shows Musicals Musiktheater
13 Shows Schauspiel Theater, das kein Musiktheater ist
14 Shows Oper Alle Opern, sowohl leichte Opern als auch Rockopern
15 Konzerte Klassisch Alle Symphoniekonzerte, Konzerte und Chorkonzerte

Im folgenden Beispiel werden die Inhalte einer Textdatei gezeigt, deren Feldwerte durch Kommas getrennt sind.

12,Shows,Musicals,Musical theatre 13,Shows,Plays,All "non-musical" theatre 14,Shows,Opera,All opera, light, and "rock" opera 15,Concerts,Classical,All symphony, concerto, and choir concerts

Wenn Sie die Datei mit dem DELIMITER Parameter laden, um eine kommagetrennte Eingabe anzugeben, schlägt der COPY Befehl fehl, da einige Eingabefelder Kommas enthalten. Sie können dieses Problem vermeiden, indem Sie den CSV Parameter verwenden und die Felder, die Kommas enthalten, in Anführungszeichen einschließen. Wenn ein Anführungszeichen innerhalb einer Zeichenfolge vorkommt, die durch Anführungszeichen eingeschlossen wird, müssen Sie dieses mit einer Escape-Markierung versehen, indem Sie das Anführungszeichen verdoppeln. Das Standardanführungszeichen ist ein doppeltes Anführungszeichen. Daher müssen Sie jedes doppelte Anführungszeichen mit einem zusätzlichen doppelten Anführungszeichen als Escape-Zeichen verwenden. Ihre neue Eingabedatei sieht ungefähr wie folgt aus.

12,Shows,Musicals,Musical theatre 13,Shows,Plays,"All ""non-musical"" theatre" 14,Shows,Opera,"All opera, light, and ""rock"" opera" 15,Concerts,Classical,"All symphony, concerto, and choir concerts"

Angenommen, der Dateiname lautetcategory_csv.txt, können Sie die Datei mit dem folgenden COPY Befehl laden:

copy category from 's3://amzn-s3-demo-bucket/data/category_csv.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' csv;

Um zu vermeiden, dass die doppelten Anführungszeichen in Ihrer Eingabe maskiert werden müssen, können Sie alternativ mithilfe des QUOTE AS-Parameters ein anderes Anführungszeichen angeben. Beispielsweise verwendet die folgende Version von category_csv.txt '%' als Anführungszeichen:

12,Shows,Musicals,Musical theatre 13,Shows,Plays,%All "non-musical" theatre% 14,Shows,Opera,%All opera, light, and "rock" opera% 15,Concerts,Classical,%All symphony, concerto, and choir concerts%

Der folgende COPY Befehl verwendet QUOTE AS zum Ladencategory_csv.txt:

copy category from 's3://amzn-s3-demo-bucket/data/category_csv.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' csv quote as '%';

VENUEMit expliziten Werten für eine IDENTITY Spalte laden

Im folgenden Beispiel wird davon ausgegangen, dass bei der Erstellung der VENUE Tabelle mindestens eine Spalte (z. B. die venueid Spalte) als IDENTITY Spalte angegeben wurde. Dieser Befehl überschreibt das IDENTITY Standardverhalten der automatischen Generierung von Werten für eine IDENTITY Spalte und lädt stattdessen die expliziten Werte aus der Datei venue.txt. Amazon Redshift prüft nicht, ob doppelte IDENTITY Werte in die Tabelle geladen werden, wenn die IDS Option EXLICIT _ verwendet wird.

copy venue from 's3://amzn-s3-demo-bucket/data/venue.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' explicit_ids;

TIMEAus einer durch Leerzeichen getrennten Datei laden GZIP

Im folgenden Beispiel wird die TIME Tabelle aus einer durch Leerzeichen getrennten Datei geladen: GZIP

copy time from 's3://amzn-s3-demo-bucket/data/timerows.gz' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' gzip delimiter '|';

Laden eines Zeit- oder Datumsstempels

Im folgenden Beispiel werden Daten mit formatierten Zeitstempeln geladen.

Anmerkung

Der Wert TIMEFORMAT von unterstützt HH:MI:SS auch Sekundenbruchteile mit einer Detailgenauigkeit von SS bis zu einer Mikrosekunde. Die in diesem Beispiel verwendete Datei time.txt enthält eine einzige Zeile, 2009-01-12 14:15:57.119568.

copy timestamp1 from 's3://amzn-s3-demo-bucket/data/time.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' timeformat 'YYYY-MM-DD HH:MI:SS';

Das Ergebnis dieser COPY-Operation ist wie folgt:

select * from timestamp1; c1 ---------------------------- 2009-01-12 14:15:57.119568 (1 row)

Laden von Daten aus einer Datei mit Standardwerten

Im folgenden Beispiel wird eine Variante der VENUE Tabelle in der TICKIT Datenbank verwendet. Stellen Sie sich eine VENUE NEW _-Tabelle vor, die mit der folgenden Anweisung definiert wurde:

create table venue_new( venueid smallint not null, venuename varchar(100) not null, venuecity varchar(30), venuestate char(2), venueseats integer not null default '1000');

Stellen Sie sich eine Datendatei venue_noseats.txt vor, die keine Werte für die VENUESEATS Spalte enthält, wie im folgenden Beispiel gezeigt:

1|Toyota Park|Bridgeview|IL| 2|Columbus Crew Stadium|Columbus|OH| 3|RFK Stadium|Washington|DC| 4|CommunityAmerica Ballpark|Kansas City|KS| 5|Gillette Stadium|Foxborough|MA| 6|New York Giants Stadium|East Rutherford|NJ| 7|BMO Field|Toronto|ON| 8|The Home Depot Center|Carson|CA| 9|Dick's Sporting Goods Park|Commerce City|CO| 10|Pizza Hut Park|Frisco|TX|

Mit der folgenden COPY Anweisung wird die Tabelle erfolgreich aus der Datei geladen und der DEFAULT Wert ('1000') auf die ausgelassene Spalte angewendet:

copy venue_new(venueid, venuename, venuecity, venuestate) from 's3://amzn-s3-demo-bucket/data/venue_noseats.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter '|';

Betrachten Sie nun die geladene Tabelle:

select * from venue_new order by venueid; venueid | venuename | venuecity | venuestate | venueseats ---------+----------------------------+-----------------+------------+------------ 1 | Toyota Park | Bridgeview | IL | 1000 2 | Columbus Crew Stadium | Columbus | OH | 1000 3 | RFK Stadium | Washington | DC | 1000 4 | CommunityAmerica Ballpark | Kansas City | KS | 1000 5 | Gillette Stadium | Foxborough | MA | 1000 6 | New York Giants Stadium | East Rutherford | NJ | 1000 7 | BMO Field | Toronto | ON | 1000 8 | The Home Depot Center | Carson | CA | 1000 9 | Dick's Sporting Goods Park | Commerce City | CO | 1000 10 | Pizza Hut Park | Frisco | TX | 1000 (10 rows)

Im folgenden Beispiel wird neben der Annahme, dass keine VENUESEATS Daten in der Datei enthalten sind, auch davon ausgegangen, dass keine VENUENAME Daten enthalten sind:

1||Bridgeview|IL| 2||Columbus|OH| 3||Washington|DC| 4||Kansas City|KS| 5||Foxborough|MA| 6||East Rutherford|NJ| 7||Toronto|ON| 8||Carson|CA| 9||Commerce City|CO| 10||Frisco|TX|

Bei Verwendung derselben Tabellendefinition schlägt die folgende COPY Anweisung fehl, da kein DEFAULT Wert für VENUENAME angegeben wurde und VENUENAME es sich um eine NOT NULL Spalte handelt:

copy venue(venueid, venuecity, venuestate) from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter '|';

Stellen Sie sich nun eine Variante der VENUE Tabelle vor, die eine IDENTITY Spalte verwendet:

create table venue_identity( venueid int identity(1,1), venuename varchar(100) not null, venuecity varchar(30), venuestate char(2), venueseats integer not null default '1000');

Gehen Sie wie im vorherigen Beispiel davon aus, dass die VENUESEATS Spalte keine entsprechenden Werte in der Quelldatei hat. Mit der folgenden COPY Anweisung wird die Tabelle einschließlich der vordefinierten IDENTITY Datenwerte erfolgreich geladen, anstatt diese Werte automatisch zu generieren:

copy venue(venueid, venuename, venuecity, venuestate) from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter '|' explicit_ids;

Diese Anweisung schlägt fehl, weil sie die IDENTITY Spalte nicht einschließt (sie VENUEID fehlt in der Spaltenliste), aber einen EXPLICIT IDS _-Parameter enthält:

copy venue(venuename, venuecity, venuestate) from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter '|' explicit_ids;

Diese Anweisung schlägt fehl, weil sie keinen EXPLICIT IDS _-Parameter enthält:

copy venue(venueid, venuename, venuecity, venuestate) from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter '|';

COPYDaten mit der ESCAPE Option

Im folgenden Beispiel wird gezeigt, wie Zeichen geladen werden, die mit dem Trennzeichen übereinstimmen (in diesem Fall dem Pipe-Zeichen). Stellen Sie sicher, dass in der Eingabedatei alle Pipe-Zeichen (|), die Sie laden möchten, mit dem Backslash-Zeichen (\) als Escape-Zeichen markiert sind. Laden Sie dann die Datei mit dem ESCAPE Parameter.

$ more redshiftinfo.txt 1|public\|event\|dwuser 2|public\|sales\|dwuser create table redshiftinfo(infoid int,tableinfo varchar(50)); copy redshiftinfo from 's3://amzn-s3-demo-bucket/data/redshiftinfo.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' delimiter '|' escape; select * from redshiftinfo order by 1; infoid | tableinfo -------+-------------------- 1 | public|event|dwuser 2 | public|sales|dwuser (2 rows)

Ohne den ESCAPE Parameter schlägt dieser COPY Befehl mit einem Extra column(s) found Fehler fehl.

Wichtig

Wenn Sie Ihre Daten mithilfe von a COPY mit dem ESCAPE Parameter laden, müssen Sie den ESCAPE Parameter auch mit Ihrem UNLOAD Befehl angeben, um die reziproke Ausgabedatei zu generieren. Ebenso müssen Sie, wenn Sie UNLOAD den ESCAPE Parameter verwenden, ESCAPE wenn Sie COPY dieselben Daten verwenden.

Aus JSON Beispielen kopieren

In den folgenden Beispielen laden Sie die CATEGORY Tabelle mit den folgenden Daten.

CATID CATGROUP CATNAME CATDESC
1 Sport MLB Major League Baseball
2 Sport NHL National Hockey League
3 Sport NFL National Football League
4 Sport NBA National Basketball Association
5 Konzerte Klassisch Alle Symphoniekonzerte, Konzerte und Chorkonzerte

Aus JSON Daten mit der Option „Auto“ laden

Um mithilfe der 'auto' Option aus JSON Daten zu laden, müssen die JSON Daten aus einer Reihe von Objekten bestehen. Die Schlüsselnamen müssen mit den Spaltennamen übereinstimmen. In diesem Fall spielt die Reihenfolge jedoch keine Rolle. Im folgenden werden die Inhalte einer Datei namens gezeigt category_object_auto.json.

{ "catdesc": "Major League Baseball", "catid": 1, "catgroup": "Sports", "catname": "MLB" } { "catgroup": "Sports", "catid": 2, "catname": "NHL", "catdesc": "National Hockey League" }{ "catid": 3, "catname": "NFL", "catgroup": "Sports", "catdesc": "National Football League" } { "bogus": "Bogus Sports LLC", "catid": 4, "catgroup": "Sports", "catname": "NBA", "catdesc": "National Basketball Association" } { "catid": 5, "catgroup": "Shows", "catname": "Musicals", "catdesc": "All symphony, concerto, and choir concerts" }

Führen Sie den folgenden COPY Befehl aus, um JSON Daten aus der Datendatei im vorherigen Beispiel zu laden.

copy category from 's3://amzn-s3-demo-bucket/category_object_auto.json' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' json 'auto';

Aus JSON Daten laden mit der Option „Fall auto ignorieren“

Um mithilfe der 'auto ignorecase' Option aus JSON Daten zu laden, müssen die JSON Daten aus einer Reihe von Objekten bestehen. Die Groß- und Kleinschreibung der Schlüsselnamen muss nicht mit den Spaltennamen übereinstimmen und die Reihenfolge spielt keine Rolle. Im folgenden werden die Inhalte einer Datei namens gezeigt category_object_auto-ignorecase.json.

{ "CatDesc": "Major League Baseball", "CatID": 1, "CatGroup": "Sports", "CatName": "MLB" } { "CatGroup": "Sports", "CatID": 2, "CatName": "NHL", "CatDesc": "National Hockey League" }{ "CatID": 3, "CatName": "NFL", "CatGroup": "Sports", "CatDesc": "National Football League" } { "bogus": "Bogus Sports LLC", "CatID": 4, "CatGroup": "Sports", "CatName": "NBA", "CatDesc": "National Basketball Association" } { "CatID": 5, "CatGroup": "Shows", "CatName": "Musicals", "CatDesc": "All symphony, concerto, and choir concerts" }

Führen Sie den folgenden COPY Befehl aus, um JSON Daten aus der Datendatei im vorherigen Beispiel zu laden.

copy category from 's3://amzn-s3-demo-bucket/category_object_auto ignorecase.json' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' json 'auto ignorecase';

Aus JSON Daten mithilfe einer JSONPaths Datei laden

Wenn die JSON Datenobjekte nicht direkt den Spaltennamen entsprechen, können Sie eine JSONPaths Datei verwenden, um die JSON Elemente den Spalten zuzuordnen. Die Reihenfolge in den JSON Quelldaten spielt keine Rolle, aber die Reihenfolge der JSONPaths Dateiausdrücke muss mit der Reihenfolge der Spalten übereinstimmen. Angenommen, Sie verwenden die folgende Datendatei mit dem Namen category_object_paths.json.

{ "one": 1, "two": "Sports", "three": "MLB", "four": "Major League Baseball" } { "three": "NHL", "four": "National Hockey League", "one": 2, "two": "Sports" } { "two": "Sports", "three": "NFL", "one": 3, "four": "National Football League" } { "one": 4, "two": "Sports", "three": "NBA", "four": "National Basketball Association" } { "one": 6, "two": "Shows", "three": "Musicals", "four": "All symphony, concerto, and choir concerts" }

Die folgende JSONPaths Datei mit dem Namen category_jsonpath.json ordnet die Quelldaten den Tabellenspalten zu.

{ "jsonpaths": [ "$['one']", "$['two']", "$['three']", "$['four']" ] }

Führen Sie den folgenden COPY Befehl aus, um JSON Daten aus der Datendatei im vorherigen Beispiel zu laden.

copy category from 's3://amzn-s3-demo-bucket/category_object_paths.json' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' json 's3://amzn-s3-demo-bucket/category_jsonpath.json';

Aus JSON Arrays mithilfe einer JSONPaths Datei laden

Um JSON Daten zu laden, die aus einer Reihe von Arrays bestehen, müssen Sie eine JSONPaths Datei verwenden, um die Array-Elemente den Spalten zuzuordnen. Angenommen, Sie verwenden die folgende Datendatei mit dem Namen category_array_data.json.

[1,"Sports","MLB","Major League Baseball"] [2,"Sports","NHL","National Hockey League"] [3,"Sports","NFL","National Football League"] [4,"Sports","NBA","National Basketball Association"] [5,"Concerts","Classical","All symphony, concerto, and choir concerts"]

Die folgende JSONPaths Datei mit dem Namen category_array_jsonpath.json ordnet die Quelldaten den Tabellenspalten zu.

{ "jsonpaths": [ "$[0]", "$[1]", "$[2]", "$[3]" ] }

Führen Sie den folgenden COPY Befehl aus, um JSON Daten aus der Datendatei im vorherigen Beispiel zu laden.

copy category from 's3://amzn-s3-demo-bucket/category_array_data.json' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' json 's3://amzn-s3-demo-bucket/category_array_jsonpath.json';

Beispiele für die Kopie aus Avro

In den folgenden Beispielen laden Sie die CATEGORY Tabelle mit den folgenden Daten.

CATID CATGROUP CATNAME CATDESC
1 Sport MLB Major League Baseball
2 Sport NHL National Hockey League
3 Sport NFL National Football League
4 Sport NBA National Basketball Association
5 Konzerte Klassisch Alle Symphoniekonzerte, Konzerte und Chorkonzerte

Laden von Avro-Daten unter Verwendung der Option „auto“

Um Daten aus Avro-Datendateien unter Verwendung des Arguments 'auto' zu laden, müssen die Feldnamen im Avro-Schema mit den Spaltennamen übereinstimmen. Bei Verwendung des Arguments 'auto' spielt die Reihenfolge keine Rolle. Im folgenden wird das Schema für eine Datei namens gezeigt category_auto.avro.

{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "catid", "type": "int"},
        {"name": "catdesc", "type": "string"},
        {"name": "catname", "type": "string"},
        {"name": "catgroup", "type": "string"},
}

Die Daten in einer Avro-Datei liegen im binären Format vor. Sie können daher nicht von Menschen gelesen werden. Im Folgenden wird eine JSON Darstellung der Daten in der category_auto.avro Datei gezeigt.

{
   "catid": 1,
   "catdesc": "Major League Baseball",
   "catname": "MLB",
   "catgroup": "Sports"
}
{
   "catid": 2,
   "catdesc": "National Hockey League",
   "catname": "NHL",
   "catgroup": "Sports"
}
{
   "catid": 3,
   "catdesc": "National Basketball Association",
   "catname": "NBA",
   "catgroup": "Sports"
}
{
   "catid": 4,
   "catdesc": "All symphony, concerto, and choir concerts",
   "catname": "Classical",
   "catgroup": "Concerts"
}

Führen Sie den folgenden COPY Befehl aus, um Daten aus der Avro-Datendatei im vorherigen Beispiel zu laden.

copy category from 's3://amzn-s3-demo-bucket/category_auto.avro' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' format as avro 'auto';

Laden von Avro-Daten unter Verwendung der Option „auto ignorecase“

Um Daten aus Avro-Datendateien unter Verwendung des Arguments 'auto ignorecase' zu laden, muss die Groß-/Kleinschreibung der Feldnamen im Avro-Schema nicht mit den Spaltennamen übereinstimmen. Bei Verwendung des Arguments 'auto ignorecase' spielt die Reihenfolge keine Rolle. Im folgenden wird das Schema für eine Datei namens gezeigt category_auto-ignorecase.avro.

{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "CatID", "type": "int"},
        {"name": "CatDesc", "type": "string"},
        {"name": "CatName", "type": "string"},
        {"name": "CatGroup", "type": "string"},
}

Die Daten in einer Avro-Datei liegen im binären Format vor. Sie können daher nicht von Menschen gelesen werden. Im Folgenden wird eine JSON Darstellung der Daten in der category_auto-ignorecase.avro Datei gezeigt.

{
   "CatID": 1,
   "CatDesc": "Major League Baseball",
   "CatName": "MLB",
   "CatGroup": "Sports"
}
{
   "CatID": 2,
   "CatDesc": "National Hockey League",
   "CatName": "NHL",
   "CatGroup": "Sports"
}
{
   "CatID": 3,
   "CatDesc": "National Basketball Association",
   "CatName": "NBA",
   "CatGroup": "Sports"
}
{
   "CatID": 4,
   "CatDesc": "All symphony, concerto, and choir concerts",
   "CatName": "Classical",
   "CatGroup": "Concerts"
}

Führen Sie den folgenden COPY Befehl aus, um Daten aus der Avro-Datendatei im vorherigen Beispiel zu laden.

copy category from 's3://amzn-s3-demo-bucket/category_auto-ignorecase.avro' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' format as avro 'auto ignorecase';

Laden Sie mithilfe einer Datei aus Avro-Daten JSONPaths

Wenn die Feldnamen im Avro-Schema nicht direkt den Spaltennamen entsprechen, können Sie eine JSONPaths Datei verwenden, um die Schemaelemente den Spalten zuzuordnen. Die Reihenfolge der JSONPaths Dateiausdrücke muss mit der Reihenfolge der Spalten übereinstimmen.

Angenommen, Sie verwenden eine Datendatei namens category_paths.avro, die dieselben Daten wie im vorherigen Beispiel enthält, jedoch mit dem folgenden Schema.

{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "desc", "type": "string"},
        {"name": "name", "type": "string"},
        {"name": "group", "type": "string"},
        {"name": "region", "type": "string"} 
     ]
}

Die folgende JSONPaths Datei mit dem Namen category_path.avropath ordnet die Quelldaten den Tabellenspalten zu.

{
    "jsonpaths": [
        "$['id']",
        "$['group']",
        "$['name']",
        "$['desc']"
    ]
}

Führen Sie den folgenden COPY Befehl aus, um Daten aus der Avro-Datendatei im vorherigen Beispiel zu laden.

copy category from 's3://amzn-s3-demo-bucket/category_object_paths.avro' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' format avro 's3://amzn-s3-demo-bucket/category_path.avropath ';

Dateien werden für COPY mit der ESCAPE Option vorbereitet

Das folgende Beispiel beschreibt, wie Sie Daten so vorbereiten können, dass Zeilenumbruchzeichen „maskiert“ werden, bevor Sie die Daten mithilfe des COPY Befehls mit dem Parameter in eine Amazon Redshift Redshift-Tabelle importieren. ESCAPE Ohne die Daten für die Abgrenzung der Zeilenumbruchzeichen vorzubereiten, gibt Amazon Redshift Ladefehler zurück, wenn Sie den COPY Befehl ausführen, da das Zeilenumbruchzeichen normalerweise als Datensatztrennzeichen verwendet wird.

Betrachten Sie beispielsweise eine Datei oder eine Spalte in einer externen Tabelle, die Sie in eine Amazon-Redshift-Tabelle kopieren möchten. Wenn die Datei oder Spalte XML -formatierten Inhalt oder ähnliche Daten enthält, müssen Sie sicherstellen, dass alle Zeilenumbruchzeichen (\n), die Teil des Inhalts sind, mit dem umgekehrten Schrägstrich (\) maskiert werden.

Eine Datei oder Tabelle, die eingebettete Zeichen für Zeilenumbrüche enthält, bietet ein vergleichsweise einfaches Muster für den Vergleich. Die eingebetteten Zeichen für neue Zeilen folgen wahrscheinlich meistens einem >-Zeichen, wobei sich dazwischen möglicherweise einige Leerstellen (' ' oder Tabulatorzeichen) befinden, wie Sie im folgenden Beispiel für eine Textdatei namens nlTest1.txt sehen können.

$ cat nlTest1.txt <xml start> <newline characters provide> <line breaks at the end of each> <line in content> </xml>|1000 <xml> </xml>|2000

Im folgenden Beispiel können Sie ein Textverarbeitungsprogramm ausführen, um die Quelldatei vorab zu bearbeiten und an den nötigen Stellen Escape-Zeichen einzufügen. (Das Zeichen | soll als Trennzeichen verwendet werden, um Spaltendaten beim Kopieren in eine Amazon-Redshift-Tabelle zu trennen).

$ sed -e ':a;N;$!ba;s/>[[:space:]]*\n/>\\\n/g' nlTest1.txt > nlTest2.txt

Ähnlich können Sie Perl verwenden, um eine vergleichbare Operation auszuführen:

cat nlTest1.txt | perl -p -e 's/>\s*\n/>\\\n/g' > nlTest2.txt

Um die Daten aus der Datei nlTest2.txt in Amazon Redshift laden zu können, wurde in eine Tabelle mit zwei Spalten erstellt. Die erste Spalte c1 ist eine Zeichenspalte, die -formatierten Inhalt der Datei enthältXML. nlTest2.txt Die zweite Spalte c2 enthält Ganzzahlwerte, die aus derselben Datei geladen wurden.

Nachdem Sie den sed Befehl ausgeführt haben, können Sie mithilfe des ESCAPE Parameters Daten aus der nlTest2.txt Datei korrekt in eine Amazon Redshift Redshift-Tabelle laden.

Anmerkung

Wenn Sie den ESCAPE Parameter in den COPY Befehl einbeziehen, maskiert er eine Reihe von Sonderzeichen, zu denen auch der umgekehrte Schrägstrich (einschließlich Zeilenumbruch) gehört.

copy t2 from 's3://amzn-s3-demo-bucket/data/nlTest2.txt' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' escape delimiter as '|'; select * from t2 order by 2; c1 | c2 -------------+------ <xml start> <newline characters provide> <line breaks at the end of each> <line in content> </xml> | 1000 <xml> </xml> | 2000 (2 rows)

Sie können Datendateien, die aus externen Datenbanken exportiert wurden, auf ähnliche Weise vorbereiten. Bei einer Oracle-Datenbank können Sie die REPLACE Funktion beispielsweise für jede betroffene Spalte in einer Tabelle verwenden, die Sie in Amazon Redshift kopieren möchten.

SELECT c1, REPLACE(c2, \n',\\n' ) as c2 from my_table_with_xml

Darüber hinaus bieten viele Tools zum Exportieren und Extrahieren, Transformieren und Laden (ETL) von Datenbanken, die routinemäßig große Datenmengen verarbeiten, Optionen zur Angabe von Escapezeichen und Trennzeichen.

Laden eines Shapefile in Amazon Redshift

Die folgenden Beispiele zeigen, wie Sie ein Esri Shapefile mit laden. COPY Weitere Informationen zum Laden von Shapefiles finden Sie unter Laden eines Shapefile in Amazon Redshift.

Laden eines Shapefile

Die folgenden Schritte zeigen, wie Sie mithilfe des COPY Befehls OpenStreetMap Daten aus Amazon S3 aufnehmen. In diesem Beispiel wird davon ausgegangen, dass das norwegische Shapefile-Archiv von der Download-Site von Geofabrik in einen privaten Amazon S3 S3-Bucket in Ihrem AWS Region. Die Dateien .shp, .shx und.dbf müssen dasselbe Amazon-S3-Präfix und denselben Dateinamen haben.

Erfassung von Daten ohne Vereinfachung

Mit den folgenden Befehlen werden Tabellen erstellt und Daten erfasst, die ohne Vereinfachung in die maximale Geometriegröße passen. Öffnen Sie das gis_osm_natural_free_1.shp in Ihrer bevorzugten GIS Software und überprüfen Sie die Spalten in dieser Ebene. Standardmäßig stehen die GEOMETRY Spalten entweder IDENTITY oder an erster Stelle. Wenn eine GEOMETRY Spalte an erster Stelle steht, können Sie die Tabelle wie folgt erstellen.

CREATE TABLE norway_natural ( wkb_geometry GEOMETRY, osm_id BIGINT, code INT, fclass VARCHAR, name VARCHAR);

Oder, wenn eine IDENTITY Spalte an erster Stelle steht, können Sie die Tabelle wie folgt erstellen.

CREATE TABLE norway_natural_with_id ( fid INT IDENTITY(1,1), wkb_geometry GEOMETRY, osm_id BIGINT, code INT, fclass VARCHAR, name VARCHAR);

Jetzt können Sie die Daten mit COPY aufnehmen.

COPY norway_natural FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp' FORMAT SHAPEFILE CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName'; INFO: Load into table 'norway_natural' completed, 83891 record(s) loaded successfully

Oder Sie können die Daten wie folgt erfassen.

COPY norway_natural_with_id FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp' FORMAT SHAPEFILE CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName'; INFO: Load into table 'norway_natural_with_id' completed, 83891 record(s) loaded successfully.

Erfassung von Daten mit Vereinfachung

Mit den folgenden Befehlen wird eine Tabelle erstellt und es wird versucht, Daten zu erfassen, die ohne Vereinfachung nicht in die maximale Geometriegröße passen. Untersuchen Sie das gis_osm_water_a_free_1.shp-Shapefile und erstellen Sie die entsprechende Tabelle wie folgt.

CREATE TABLE norway_water ( wkb_geometry GEOMETRY, osm_id BIGINT, code INT, fclass VARCHAR, name VARCHAR);

Wenn der COPY Befehl ausgeführt wird, führt dies zu einem Fehler.

COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp' FORMAT SHAPEFILE CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName'; ERROR: Load into table 'norway_water' failed. Check 'stl_load_errors' system table for details.

Eine Abfrage von STL_LOAD_ERRORS zeigt an, dass die Geometrie zu groß ist.

SELECT line_number, btrim(colname), btrim(err_reason) FROM stl_load_errors WHERE query = pg_last_copy_id(); line_number | btrim | btrim -------------+--------------+----------------------------------------------------------------------- 1184705 | wkb_geometry | Geometry size: 1513736 is larger than maximum supported size: 1048447

Um dieses Problem zu beheben, wird der SIMPLIFY AUTO Parameter dem COPY Befehl hinzugefügt, um Geometrien zu vereinfachen.

COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp' FORMAT SHAPEFILE SIMPLIFY AUTO CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName'; INFO: Load into table 'norway_water' completed, 1989196 record(s) loaded successfully.

Um die Zeilen und Geometrien anzuzeigen, die vereinfacht wurden, fragen Sie ab SVL_SPATIAL_SIMPLIFY.

SELECT * FROM svl_spatial_simplify WHERE query = pg_last_copy_id(); query | line_number | maximum_tolerance | initial_size | simplified | final_size | final_tolerance -------+-------------+-------------------+--------------+------------+------------+---------------------- 20 | 1184704 | -1 | 1513736 | t | 1008808 | 1.276386653895e-05 20 | 1664115 | -1 | 1233456 | t | 1023584 | 6.11707814796635e-06

Die Verwendung von SIMPLIFY AUTO max_tolerance mit einer geringeren Toleranz als den automatisch berechneten Toleranzen führt wahrscheinlich zu einem Eingabefehler. Verwenden MAXERROR Sie in diesem Fall, um Fehler zu ignorieren.

COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp' FORMAT SHAPEFILE SIMPLIFY AUTO 1.1E-05 MAXERROR 2 CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName'; INFO: Load into table 'norway_water' completed, 1989195 record(s) loaded successfully. INFO: Load into table 'norway_water' completed, 1 record(s) could not be loaded. Check 'stl_load_errors' system table for details.

Fragen Sie SVL_SPATIAL_SIMPLIFY erneut ab, um den Datensatz zu identifizieren, der COPY nicht geladen werden konnte.

SELECT * FROM svl_spatial_simplify WHERE query = pg_last_copy_id(); query | line_number | maximum_tolerance | initial_size | simplified | final_size | final_tolerance -------+-------------+-------------------+--------------+------------+------------+----------------- 29 | 1184704 | 1.1e-05 | 1513736 | f | 0 | 0 29 | 1664115 | 1.1e-05 | 1233456 | t | 794432 | 1.1e-05

In diesem Beispiel konnte der erste Datensatz nicht eingefügt werden, sodass die Spalte simplified falsch angezeigt wird. Der zweite Datensatz wurde innerhalb der vorgegebenen Toleranz geladen. Die endgültige Größe ist jedoch größer als bei Verwendung der automatisch berechneten Toleranz ohne Angabe der maximalen Toleranz.

Laden aus einem komprimierten Shapefile

Amazon Redshift COPY unterstützt die Aufnahme von Daten aus einem komprimierten Shapefile. Alle Shapefile-Komponenten müssen dasselbe Amazon-S3-Präfix und dasselbe Komprimierungssuffix aufweisen. Nehmen wir an, Sie möchten die Daten aus dem vorherigen Beispiel laden. In diesem Fall müssen sich die Dateien gis_osm_water_a_free_1.shp.gz, gis_osm_water_a_free_1.dbf.gz und gis_osm_water_a_free_1.shx.gz das gleiche Amazon-S3-Verzeichnis teilen. Der COPY Befehl erfordert die GZIP Option, und die FROM Klausel muss die richtige komprimierte Datei angeben, wie im Folgenden dargestellt.

COPY norway_natural FROM 's3://bucket_name/shapefiles/norway/compressed/gis_osm_natural_free_1.shp.gz' FORMAT SHAPEFILE GZIP CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName'; INFO: Load into table 'norway_natural' completed, 83891 record(s) loaded successfully.

Laden von Daten in eine Tabelle mit einer anderen Spaltenreihenfolge

Wenn Sie eine Tabelle haben, die nicht GEOMETRY als erste Spalte hat, können Sie die Spalten-Mapping verwenden, um die Spalten der Zieltabelle zuzuordnen. Erstellen Sie z. B. eine Tabelle mit osm_id als erste Spalte.

CREATE TABLE norway_natural_order ( osm_id BIGINT, wkb_geometry GEOMETRY, code INT, fclass VARCHAR, name VARCHAR);

Laden Sie dann ein Shapefile unter Verwendung des Spalten-Mappings.

COPY norway_natural_order(wkb_geometry, osm_id, code, fclass, name) FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp' FORMAT SHAPEFILE CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName'; INFO: Load into table 'norway_natural_order' completed, 83891 record(s) loaded successfully.

Laden von Daten in eine Tabelle mit einer Geografiespalte

Wenn Sie eine Tabelle mit einer GEOGRAPHY-Spalte haben, erfassen Sie zuerst in eine GEOMETRY-Spalte und wandeln dann die Objekte in GEOGRAPHY-Objekte um. Zum Beispiel: Nachdem Sie Ihr Shapefile in eine GEOMETRY-Spalte kopiert haben, ändern Sie die Tabelle, um eine Spalte mit dem Datentyp GEOGRAPHY hinzuzufügen.

ALTER TABLE norway_natural ADD COLUMN wkb_geography GEOGRAPHY;

Dann konvertieren Sie die Geometrien in Geografien.

UPDATE norway_natural SET wkb_geography = wkb_geometry::geography;

Optional können Sie auch die GEOMETRY-Spalte entfernen.

ALTER TABLE norway_natural DROP COLUMN wkb_geometry;

COPYBefehl mit der NOLOAD Option

Um Datendateien zu überprüfen, bevor Sie die Daten tatsächlich laden, verwenden Sie die NOLOAD Option zusammen mit dem COPY Befehl. Amazon Redshift analysiert die Eingabedatei und zeigt alle auftretenden Fehler an. Im folgenden Beispiel wird die NOLOAD Option verwendet, und es werden tatsächlich keine Zeilen in die Tabelle geladen.

COPY public.zipcode1 FROM 's3://amzn-s3-demo-bucket/mydata/zipcode.csv' DELIMITER ';' IGNOREHEADER 1 REGION 'us-east-1' NOLOAD CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/myRedshiftRole'; Warnings: Load into table 'zipcode1' completed, 0 record(s) loaded successfully.

COPYBefehl mit einem Multibyte-Trennzeichen und der Option ENCODING

Das folgende Beispiel wird LATIN1 aus einer Amazon S3 S3-Datei geladen, die Multibyte-Daten enthält. Der COPY Befehl gibt das Trennzeichen in Oktalform an, um die Felder in der Eingabedatei \302\246\303\254 zu trennen, die als -8859-1 codiert ist. ISO Um dasselbe Trennzeichen in -8 anzugeben, geben Sie an. UTF DELIMITER '¦ì'

COPY latin1 FROM 's3://amzn-s3-demo-bucket/multibyte/myfile' IAM_ROLE 'arn:aws:iam::123456789012:role/myRedshiftRole' DELIMITER '\302\246\303\254' ENCODING ISO88591