我在 blob 中有一個 csv 資料檔案,我正在嘗試在其上創建一個外部表。這是檔案在文本編輯器中的樣子 -
"ABC"|"123"|"ID1"
"XYZ"|"456"|"ID2"
當我使用管道作為分隔符創建一個外部表然后查詢各個列時,我看到了這些值 -
value:c1|value:c2|value:c3
"\"ABC\"" "\"123\"" "\"ID1\""
"\"XYZ\"" "\"345\"" "\"ID2\""
我需要添加到 field_optionally_enclosed_by 選項嗎?我很容易做到
select replace(value:c1,'\\"'),replace(value:c2,'\\"'),replace(value:c3,'\\"') from testable
這讓我回來了
value:c1|value:c2|value:c3
"ABC" "123" "ID1"
"XYZ" "345" "ID2"
有什么建議?
uj5u.com熱心網友回復:
如果您的資料始終是固定寬度,并且您希望將獨立值寫入外部表,那么SPLIT和嵌套選擇可能會有所幫助:
SELECT
get(s,0) as a,
get(s,1) as b,
get(s,2) as c
FROM (
SELECT split(column1,'|') as s
FROM VALUES
('"ABC"|"123"|"ID1"'),
('"XYZ"|"456"|"ID2"')
);
給出:
| 一個 | 乙 | C |
|---|---|---|
| ""ABC"" | ""123"" | ""ID1"" |
| ""XYZ"" | ""456"" | ""ID2"" |
這看起來很有趣,因為輸出層已經轉義了內部雙引號。因此,您可以使用 TRIM 洗掉這些:
SELECT
trim(get(s,0),'"') as a,
trim(get(s,1),'"') as b,
trim(get(s,2),'"') as c
FROM (
SELECT split(column1,'|') as s
FROM VALUES
('"ABC"|"123"|"ID1"'),
('"XYZ"|"456"|"ID2"')
);
| 一個 | 乙 | C |
|---|---|---|
| 美國廣播公司 | 123 | ID1 |
| XYZ | 456 | ID2 |
如果您不喜歡子選擇,您可以使用SPLIT_PART
SELECT
trim(split_part(column1,'|',0),'"') as a,
trim(split_part(column1,'|',1),'"') as b,
trim(split_part(column1,'|',2),'"') as c
FROM VALUES
('"ABC"|"123"|"ID1"'),
('"XYZ"|"456"|"ID2"')
;
uj5u.com熱心網友回復:
請在下面嘗試,看看它是否有幫助,它在我的測驗中有效:
create or replace external table external_table
with location = @test.ericlin_s3_stage/t1/
auto_refresh = true
REFRESH_ON_CREATE = true
FILE_FORMAT = (
TYPE=CSV
COMPRESSION=NONE
REPLACE_INVALID_CHARACTERS = TRUE
FIELD_DELIMITER = '|'
FIELD_OPTIONALLY_ENCLOSED_BY = '"'
ESCAPE_UNENCLOSED_FIELD = '\\'
);
select
value:c1, value:c2, value:c3
from external_table;
---------- ---------- ----------
| VALUE:C1 | VALUE:C2 | VALUE:C3 |
|---------- ---------- ----------|
| "ABC" | "123" | "ID1" |
| "XYZ" | "456" | "ID2" |
---------- ---------- ----------
select
value:c1::string as c1,
value:c2::string as c2,
value:c3::string as c3
from external_table;
----- ----- -----
| C1 | C2 | C3 |
|----- ----- -----|
| ABC | 123 | ID1 |
| XYZ | 456 | ID2 |
----- ----- -----
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/421768.html
標籤:
上一篇:文本輸入過濾器未初始化?
