AnalyticDB for PostgreSQLは、データをインポートする複数のメソッドを提供します。 詳細については、「データ移行と同期ソリューションの概要」をご参照ください。
特殊文字は、OSSを使用してデータを並列にインポートするとき、または \COPYコマンドを使用してデータをインポートするときに、インポートエラーを引き起こす可能性があります。 このトピックでは、これらの特殊文字によるエラーを回避するために、インポートするデータファイル内の特殊文字を前処理する方法について説明します。
OSSを使用してデータを並列にインポートするときに特殊文字を前処理するメソッド
OSSを使用してデータを並列にインポートすると、各行はタプルとして処理されます。 各列のデータを区切るには、各行に区切り文字を指定する必要があります。 このセクションでは、OSS外部テーブルを作成するときに区切り文字を指定する方法、区切り文字の制約、およびOSSを使用してデータを並列にインポートするときに列内のさまざまな種類の特殊文字を事前処理する方法について説明します。
区切り文字
OSS外部テーブルを作成する構文では、次の例に示すように、FORMAT句の後にDELIMITERを指定できます。
FORMAT 'TEXT' (DELIMITER ',')FORMAT 'TEXT'の場合、DELIMITERはデフォルトで'\tに設定されます。FORMAT 'CSV'の場合、DELIMITERはデフォルトで','に設定されます。
OSS外部テーブルを作成するときに、次の制約を満たすカスタム区切り文字を定義することもできます。
区切り文字は単一のASCII文字でなければなりません。 2つ以上のASCII文字の文字列にすることはできません。
'\n'と'\r'はサポートされていません。'\n'および'\r'以外のエスケープ文字はサポートされていますが、使用する場合は "E" または "e" を前に付ける必要があります。エスケープ文字
'\tは、その前に「E」が付いていない場合にサポートされます。TEXTファイルの場合、DELIMITERをOFFに設定し、単一列の外部テーブルを作成できます。
OSSファイル内のデータは、データを読み取ることができるように、指定された区切り文字で区切る必要があります。
データ内の特殊文字
次のセクションでは、インポートするデータに特殊文字が存在するシナリオとそれに対応する前処理方法について説明します。
列には区切り文字と同じ文字が含まれます。
各区切り文字の前に、TEXTファイルのエスケープ文字を付ける必要があります。 エスケープ文字を指定するには、次の文を実行します。 デフォルトのエスケープ文字はバックスラッシュ (\) です。
FORMAT 'TEXT' (ESCAPE '\' )CSVファイルでは、各区切り文字の前に二重引用符 (") を付ける必要があります。
列には漢字が含まれます。 OSS外部テーブルは漢字をサポートしています。 ただし、データが正しく表示されるようにするには、OSS外部テーブルを作成するときにエンコード形式をUTF-8に設定する必要があります。
ENCODING 'UTF8'列にnullデータが含まれます。 一致する文字をnullに定義して、データのインポート時に指定された文字がnullとして識別されるようにすることができます。 CSVファイルの場合、デフォルト値は引用符なしのnull値です。 TEXTファイルの場合、デフォルト値は \Nです。 次のステートメントは、スペースをnullにマップします。 列がスペースの場合、列の値はOSSファイルからインポートされたデータではnullになります。
FORMAT 'text' (null ' ' )列にはエスケープ文字が含まれます。 エスケープ文字の前に「escape」という単語を付ける必要があります。 外部テーブルを作成するときにエスケープ文字を指定できます。 デフォルトのエスケープ文字は、CSVファイルでは二重引用符 (") 、TEXTファイルではバックスラッシュ (\) です。
ESCAPEを1文字に設定できます。 次のステートメントを使用して、ESCAPEをバックスラッシュ (\) に設定できます。
FORMAT 'csv' (ESCAPE '\' )ESCAPEをOFFに設定して、すべての文字の自動エスケープを防ぐこともできます。
列には、一重引用符または二重引用符が含まれます。
テキストファイルでは、単一引用符または二重引用符の前に「ESCAPE」単語を付ける必要があります。 デフォルトのエスケープ文字はバックスラッシュ (\) です。
CSVファイルでは、単一引用符または二重引用符の前に「ESCAPE」の単語を付ける必要があります。 デフォルトのエスケープ文字は二重引用符 (") です。 また、列全体を先頭と末尾の二重引用符で囲む必要があります。
\COPYコマンドを使用してデータをインポートするときに特殊文字を前処理するメソッド
\COPYコマンドを使用してデータをインポートする場合、OSSを使用してデータを並行してインポートする場合と同じ方法で、区切り文字と前処理の特殊文字を指定できます。 ただし、\COPYコマンドとCREATE EXTERNAL TABLEステートメントは、わずかに異なる方法で使用されます。 \COPYコマンドの使用方法の詳細については、「 \COPYコマンドの使用」をご参照ください。