AnalyticDB for PostgreSQL は、複数のデータのインポート方法をサポートします。
- OSS を使用したデータの並行インポートおよびエクスポート
- MySQL からのデータインポート
- PostgreSQL からのデータインポート
- COPY コマンドを用いたデータインポート
- Data Integration 使用したデータの同期
特殊文字は、データのインポート中にインポートエラーを引き起こすことがよくあります。 ここでは、インポートされたデータ内の特殊文字を事前処理し、それによって発生する問題を排除する方法について説明します。
前述のインポート方法では、MySQL および PostgreSQL からデータをインポートするツールが、自動的に特殊文字をエスケープしてパッケージ化するため、 追加設定なしでツールを直接使用できます。 次の内容では、OSS と COPY コマンドを使用してデータをインポートする方法と、特殊文字の処理方法について説明します。
OSS を使用したデータの並行インポート
データのインポート時には、ファイル内のすべての行がタプルと見なされることが多く、 各列のデータは行ごとに区切り文字で分割されます。 以下 では、区切り記号の使用法と制約、および 各列の特殊文字の処理方法を紹介しています。
区切り記号
OSS 外部テーブルを作成する構文では、次の ように FORMAT 句の後に区切り記号を指定します。
FORMAT 'TEXT' (DELIMITER ',')
FORMAT ‘TEXT’
に対するDELIMITER
は、 デフォルトでは\t
です。FORMAT ‘CSV’
に対するDELIMITER
は、 デフォルトでは,
です。
外部テーブルを作成する構文での規定に従い、カスタマイズされた区切り記号が 次の制約を満たすという前提であれば、独自の区切記号を定義できます。
- それらは、ASCII 文字でなければなりません。 漢字や、2 つ以上の ASCII 文字は使用できません。
\n
および\r
はサポートされていません。\n
および\r
を除くエスケープ文字は、 “E” あるいは “e” を文字の前に追加することでサポートされます。- エスケープ文字
\t
に “E” をつけないものも サポートされます。 - TEXT 形式では、DELIMITER を OFF に設定し、単一列の 外部テーブルを使用できます。
データを正しく読み取るには、OSS ファイルでは、指定した区切り文字に厳密に従う必要があります。
データ内の特殊文字
データのインポート中に、特殊文字が使用されるケースには、 次のものがあります。
-
列に区切り文字と同じ文字が含まれる場合
-
TEXT 形式を使う場合、各 DELIMITER の前に ESCAPE 文字をつけなければなりません。 ESCAPE 文字は、外部テーブルを作成するときに次のコマンドを使用して指定します。 デフォルト値は、バックスラッシュ () です。
FORMAT 'TEXT'(ESCAPE '\')
-
CSV 形式を使用する場合には、 二重引用符 (“) を各 DELIMTER 前に追加する必要があります。
-
-
列に漢字が含まれる場合。 OSS 外部テーブルは、 漢字データをサポートします。 ただし、表示が正しいことを確認するには、 作成した外部テーブルを次のようにエンコードする必要があります。
ENCODING ‘UTF8’
-
列に Null データが含まれる場合。 Null 値を文字に一致させるように設定し、 データのインポート中に指定された文字を Null に置き換えます。CSV 形式の場合、デフォルト値は 引用符のない Null 値です。 TEXT 形式の場合、デフォルト値は “\N” です。 The 次のコマンドは、スペースを Null にマップします。 列がスペースの場合、 列の値は OSS ファイルからインポートされたデータの Null になります。
FORMAT 'text' (null ' ' )
-
列にエスケープ文字が含まれる場合。 エスケープ文字の前に “ESCAPE” を追加することができます。 ESCAPE 値は、外部テーブルの作成時に指定されます。 CSV 形式の場合、デフォルト値は二重引用符(”)です。 TEXT 形式の場合、デフォルト値はバックスラッシュ(\)です。
-
ESCAPE の値を 1 文字にカスタマイズすることができます。 たとえば、次のコマンドは、ESCAPE 値を バックスラッシュに設定します。
FORMAT 'csv'(ESCAPE '\')
-
すべての文字を自動的にエスケープしないように、ESCAPE を OFF に設定することもできます。
-
-
列に、単一引用符 (‘) または二重引用符 (“) が含まれる場合。
-
TEXT 形式を用いる場合、単一引用符または二重引用符の前に ESCAPE 文字を追加する必要があります。 デフォルト値はバックスラッシュ () です。
-
CSV 形式の場合、単一引用符か二重引用符の前に ESCAPE 文字を追加する必要があります。 デフォルト値は二重引用符 (") です。 また、列を引用符で囲むには、 列の最初と最後の両方に二重引用符を追加する必要があります。
-
日付を COPY コマンドを使用してインポート
データをインポートするために、 \COPY 文を用いる場合、 区切り文字は OSS の場合と同じです。 データ内の特殊文字の扱いも 同様です。
COPY 文と CREATE EXTERNAL TABLE
文は使用上わずかな差異があります。 詳細は、「COPY コマンドを用いた データインポート」をご参照ください。
</article>
</main>