2014-09-22 28 views
0

我加入兩個文件。一個文件是從table(in0 port)提取的,具有如此的記錄格式utf8 string("\x01", maximum_length=3)
而另一個文件是正常的text file(in1 port),其記錄格式如此ascii string(3)加入兩個文件時字符串不匹配錯誤

雖然加入我得到以下錯誤AM:

Field "company" in key specifier for input in1 has type "ascii string(3)", 
but field "kg3_company_cd" in key specifier for input in0 has type "utf8 string("\x01", maximum_length=3)". 
This join may be attempted in spite of the type mismatch by 
setting configuration variable AB_ALLOW_DANGEROUS_KEY_CASTING to true. 
However, typically the input streams will have been hash-partitioned on 
the join keys of different types, making it unlikely that all equal join. 
+0

是什麼你的問題? – chanchal1987 2014-11-17 10:11:32

回答

0

的問題是,一個UTF8字符串和ASCII字符串是不同的基礎數據來表示相同的值。您收到的錯誤消息警告您,如果您的連接並行運行,則散列分區算法可能會將每個流的匹配鍵值發送到不同的分區,因爲表示「相等」字符串的基礎數據不同。例如:如果兩個流都有3個記錄,每個記錄的鍵字段值爲(「A」,「AB」,ABC「),則鍵」AB「可以位於分區0上的一個流,而分區7位於另一個流上。 join組件會爲每個分區運行一個實例,期望數據被正確分區,分區0的實例將在一個流上看到關鍵「AB」,而在另一個流上看不到關鍵「AB」,如果它是內部聯接,則只會看到匹配那名巧合發送到輸出上的同一分區鍵的記錄。

你應該選擇你想要的字符串編碼,並確保這兩個流程有匹配的編碼前加入。只需添加之前重新格式化。