SQL Data Warehouse (編集者はこれを変更しないでください。実際の名前です。ここを参照してください) には、JobCandidate_ext
次のような外部テーブルがあります。
CREATE EXTERNAL TABLE [HumanResources].[JobCandidate_ext](
[JobCandidateID] int,
[BusinessEntityID] int,
[Resume] Varchar(8000),
[ModifiedDate] Datetime
)
WITH (
LOCATION='/[HumanResources].[JobCandidate]/data.txt',
DATA_SOURCE=AzureStorage,
FILE_FORMAT=TextFile)
GO
列[Resume]
は SQL Server では型でしたXML
が、SQL データ ウェアハウスでは XML 型をここでvarchar(8000)
説明されているように変換する必要があります。
フラット ファイルdata.txt
を使用してデータを BLOB にエクスポートし、そこから外部テーブルを作成しています。
列には( [Resume]
XML ファイルから予想されるように) キャリッジ リターンが含まれているため、実行するSELECT * FROM [HumanResources].[JobCandidate_ext]
とエラーが発生します。この場合:
クエリが中止されました -- 外部ソースからの読み取り中に拒否の最大しきい値 (0 行) に達しました: 処理された合計 2 行のうち 1 行が拒否されました。
(/[HumanResources].[JobCandidate]/data.txt)列の序数: 0、予期されるデータ型: INT、問題のある値: テキスト .... (列変換エラー)、エラー: データ型 NVARCHAR を INT に変換中にエラーが発生しました。
here で説明されているように、外部テーブルを作成するときに行区切り記号を構成できないことはわかっています。
行区切り文字は UTF-8 で、Hadoop の LineRecordReader でサポートされている必要があります。行区切り文字は、'\r'、'\n'、または '\r\n' のいずれかでなければなりません。これらはユーザーが構成できません。
また、各列フィールドに引用符を付けようとすると、外部テーブルから行を選択しているときに次のエラーが発生します: No closing string delimiter
.
クエリが中止されました -- 外部ソースからの読み取り中に最大拒否しきい値 (0 行) に達しました: 処理された合計 1 行のうち 1 行が拒否されました。
(/[HumanResources].[JobCandidate]/data.txt)列序数: 2、予期されるデータ型: VARCHAR(8000) collate SQL_Latin1_General_CP1_CI_AS、問題の値: 'ShaiBassli (トークン化に失敗)、エラー: 終了文字列区切り文字がありません。
この問題を回避する方法はありますか?