Load
LOAD 陳述式可以從檔案、指令碼中定義的資料、先前載入的表格、網頁、後續 SELECT 陳述式的結果或自動產生的資料來載入欄位。 這也可以從分析連線載入資料。
語法:
LOAD [ distinct ] fieldlist
[( from file [ format-spec ] |
from_field fieldassource [format-spec]|
inline data [ format-spec ] |
resident table-label |
autogenerate size ) |extension pluginname.functionname([script] tabledescription)]
[
where criterion | while criterion
]
[
group by groupbyfieldlist
]
[order by orderbyfieldlist ]
引數distinct | 若您只想載入獨特記錄,則可以使用 distinct 作為述詞。若有重複的記錄,將會載入第一個執行個體。 若您正在使用前置載入,您需要將 distinct 置於第一個 LOAD 陳述式,如同 distinct 僅影響目的地表格。 前置 LOAD |
fieldlist | fieldlist ::= ( * | field{, * | field } ) 要載入的欄位清單。使用 * 做為欄位清單表示表格中的所有欄位。 field ::= ( fieldref | expression ) [as aliasname ]欄位定義必須一律包含常值、現有欄位的參考或運算式。 fieldref ::= ( fieldname |@fieldnumber |@startpos:endpos [ I | U | R | B | T] )fieldname 是與表格中欄位名稱相同的文字。請注意,欄位名稱如果包含空格則必須以一般雙引號或方括弧括住。有時候不一定會有檔案名稱。這時請用不同的標記法: @fieldnumber 代表分隔表格檔案中的欄位編號。其必須是正整數,前面加上 "@"。編號一律會從 1 開始,一直編號到欄位的數目為止。 @startpos:endpos 代表欄位在固定長度記錄的檔案中開始和結束的位置。這些位置必須是正整數。這兩個編號前面必須加上 "@",並且以冒號分隔。編號一律會從 1 開始,一直編號到位置的數目為止。在最後一個欄位中,n 用作結束位置。 - 如果 @startpos:endpos 後面緊接著 I 或 U 字元,會將讀取的位元組解譯為二元帶正負號 (I) 或不帶正負號 (U) 的整數 (Intel 位元組順序)。讀取的位置編號必須是 1、2 或 4。
- 如果 @startpos:endpos 後面緊接著 R 字元,會將讀取的位元組解譯為二進位實數 (IEEE 32 位元或 64 位元浮點)。讀取的位置編號必須是 4 或 8。
- 如果 @startpos:endpos 後面緊接著 B 字元,會按照 COMP-3 標準將讀取的位元組解譯為 BCD (Binary Coded Decimal) 編號。可指定任何數目的位元組。
expression 可以是以同一個表格中的其他一或數個欄位為基礎的數值函數或字串函數。如需進一步資訊,請參閱運算式的語法。 as 用來指派欄位的新名稱。 |
from | from 在應使用資料夾從檔案中載入資料的情況下使用。 在 Qlik Cloud 分析 中從空間中的檔案載入時,必須使用有效路徑。請參閱 有效空間資料夾路徑的規則。。 file ::= [ path ] filename 在 Qlik Cloud 分析 中,支援階層資料夾結構,可以在陳述式中參考。 範例: 個人空間 (上層路徑):[lib://DataFiles/abc.qvd] 個人空間 (巢狀資料夾):[lib://DataFiles/MyFolder/abc.qvd] 共用空間 (上層路徑):[lib://TeamSharedSpace:DataFiles/xyz.qvd] 共用空間 (巢狀資料夾):[lib://TeamSharedSpace:DataFiles/MyFolder/abc.qvd]
如需更多資訊和範例,請參閱 在 Qlik Cloud 分析 中從空間載入檔案。 |
from_field | 如果應該從先前載入的欄位載入資料,可使用 from_field。 fieldassource::=(tablename, fieldname) 此欄位是先前載入的 tablename 和 fieldname 名稱。 format-spec ::= ( fspec-item {, fspec-item } )格式規格包含括弧內數個格式規格項目的清單。如需詳細資訊,請參閱格式規格項目。 資訊備註分隔表格中的欄位時,from_field 僅支援逗號作為清單分隔符號。 |
inline | 如果應該在指令碼中輸入資料,而不是從檔案載入資料,可使用 inline。 data ::= [ text ] 透過 inline 子句輸入的資料必須以方括弧、引號或反引號等特定字元括住。這些之間的文字將以檔案內容的相同方式加以解譯。因此,在文字檔中要插入新行的位置,也應該在 inline 子句的文字中插入新行:方法是在輸入指令碼時按下 Enter 鍵。 在簡單的內嵌載入中,欄數量以第一行定義。 format-spec ::= ( fspec-item {, fspec-item } )您可以透過許多可用於其他載入表格的相同格式規格項目,自訂內嵌載入。這些項目列於括弧中。如需詳細資訊,請參閱格式規格項目。 如需更多關於內嵌載入的資訊,請參閱:使用內嵌載入以載入資料。 |
resident | 如果應該從先前載入的表格載入資料,可使用 resident。 table label 是建立原始表格的 LOAD 或 SELECT 陳述式之前的標籤。標籤結尾應該加上冒號。 從先前載入的表格載入資料 表格標籤 |
autogenerate | 如果 Qlik Sense 應該自動產生資料,可使用 autogenerate。 size ::= number Number 是表示要產生記錄筆數的整數。 此欄位清單不得包含需要外部資料來源或先前已載入的表格中所含資料的運算式,除非您參考的是先前已透過 Peek 函數載入的表格中的單一欄位值。 |
where | where 是指明選項中是否應該包含記錄的子句。如果 criterion 為 True,將包含選項。 criterion 是邏輯運算式。 |
while | while 是指明是否應該重複讀取記錄所用的子句。只要 criterion 為 True,就會讀取相同的記錄。若要使用,while 子句一般必須包含 IterNo( ) 函數。 criterion 是邏輯運算式。 |
group by | group by 是定義應該對哪些欄位彙總 (分組) 資料所用的子句。 彙總欄位應該以某些方式包含在載入的運算式中。只有彙總欄位才能在載入的運算式中的彙總函數之外使用。 groupbyfieldlist ::= (fieldname { ,fieldname } ) |
order by | order by 是 load 陳述式處理常駐表格記錄前將這些記錄排序所用的子句。常駐表格可按照一或多個欄位以遞增或遞減順序排序。排序主要以數值進行,其次以國家排序順序進行。只有在資料來源是常駐表格時,才能使用此子句。 排序欄位可指定常駐表格按照哪些欄位排序。可以按照常駐表格的名稱或編號 (第一個欄位的編號是 1) 指定欄位。 orderbyfieldlist ::= fieldname [ sortorder ] { , fieldname [ sortorder ] } sortorder 以 asc 表示遞增,以 desc 表示遞減。如果未指定 sortorder,將會採用 asc。 fieldname、path、filename 和 aliasname 是指出個別名稱代表什麼意義的文字字串。來源表格的任何欄位均可做為 fieldname。不過,透過 as 子句 (aliasname) 建立的欄位若不在範圍內,無法在同一個 load 陳述式內使用。 |
注意!如果並未透過 from、inline、resident、from_field、延伸 或 autogenerate 子句指定資料的來源,將從後面的 SELECT 或 LOAD 陳述式結果載入資料。後面的陳述式不應該有前置詞。
從先前載入的表格載入資料
資訊備註DataFiles 連線的檔案延伸區分大小寫。例如:.qvd。
範例:
僅從分隔符號檔案載入三個特定欄位:
LOAD FirstName, LastName, Number from [lib://DataFiles/data1.csv];
載入沒有標籤的檔案時,將第一個欄位重新命名為 A,並將第二個欄位重新命名為 B。
LOAD @1 as A, @2 as B from [lib://DataFiles/data3.txt] (ansi,
txt, delimiter is '\t', no labels);
載入 Name 作為 FirstName、空格字元和 LastName 的串連:
LOAD FirstName&' '&LastName as Name
from [lib://DataFiles/data1.csv];
載入 Quantity、Price 和 Value (Quantity 和 Price 的產品):
LOAD Quantity, Price, Quantity*Price as Value
from [lib://DataFiles/data1.csv];
僅載入唯一的記錄,將捨棄重複的記錄:
LOAD distinct FirstName, LastName, Number from [lib://DataFiles/data1.csv];
僅載入欄位 Litres 擁有 0 以上值的記錄:
LOAD * from [lib://DataFiles/Consumption.csv] where Litres>0;
載入含有內嵌資料的表格,兩個欄為名為 CatID 和 Category:
LOAD * Inline
[CatID, Category
0,Regular
1,Occasional
2,Permanent];
載入具有內嵌資料的表格,三個欄位名為 UserID、Password 和 Access:
LOAD * Inline [UserID, Password, Access
A, ABC456, User
B, VIP789, Admin];
載入含有 10 000 列的表格。欄位 A 將包含讀取記錄數 (1,2,3,4,5...),並且欄位 B 將包含 0 與 1 之間的隨機數字:
LOAD RecNo( ) as A, rand( ) as B autogenerate(10000);
資訊備註autogenerate 之後可以加括弧,但是並非必要。
首先我們載入分隔表格檔案,並將它命名為 tab1:
tab1:
SELECT A,B,C,D from [lib://DataFiles/data1.csv];
從已載入的 tab1 表格中,載入欄位作為 tab2:
tab2:
LOAD A,B,month(C),A*B+D as E resident tab1;
從已載入的表格 tab1 中載入欄位,但是僅載入 A 大於 B 的記錄:
tab3:
LOAD A,A+B+C resident tab1 where A>B;
從已載入的表格 tab1 中載入欄位,按 A 排序:
LOAD A,B*C as E resident tab1 order by A;
從已載入的表格 tab1 中載入欄位,按第一個欄位排序,然後按第二個欄位排序:
LOAD A,B*C as E resident tab1 order by 1,2;
從已載入的表格 tab1 中載入欄位,按 C 遞減順序排序,然後按 B 遞增順序排序,然後按第一個欄位遞減順序排序:
LOAD A,B*C as E resident
tab1 order by C desc, B asc, 1 desc;
從先前已載入的表格 Characters 中載入欄位 Types 以作為 A:
LOAD A from_field (Characters,
Types);
從後面以 SELECT 陳述式載入的 Table1 中,載入 A、B 以及已計算的欄位 X 和 Y:
LOAD A, B, if(C>0,'positive','negative')
as X, weekday(D) as Y;
SELECT A,B,C,D from Table1;
載入按 ArtNo 分組 (彙總) 的欄位:
LOAD ArtNo, round(Sum(TransAmount),0.05) as
ArtNoTotal from table.csv group by ArtNo;
載入按 Week 和 ArtNo 分組 (彙總) 的欄位:
LOAD Week, ArtNo, round(Avg(TransAmount),0.05)
as WeekArtNoAverages from table.csv group by Week, ArtNo;
在此範例中,我們擁有一個輸入檔 Grades.csv,其中包含在一個欄位中壓縮的每一個學生等級:
Student,Grades
Mike,5234
John,3345
Pete,1234
Paul,3352
等級為 1-5,代表主題 Math、English、Science 和 History。我們可以使用 while 子句讀取每一筆記錄數次,並將 IterNo( ) 函數用作計數器,將等級分為數個值。在每一筆記錄中,使用 Mid 函數擷取等級並儲存在 Grade 中,使用 pick 函數選取主題並儲存在 Subject 中。最終 while 子句包含測試,檢查是否已讀取所有等級 (在此案例中每個學生四個等級),這表示應該讀取接下來的學生記錄。
MyTab:
LOAD
Student,
mid(Grades,IterNo(
),1) as Grade,
pick(IterNo(
), 'Math', 'English', 'Science', 'History') as Subject from [lib://DataFiles/Grades.csv]
while IsNum(mid(Grades,IterNo(),1));
結果是包含此資料的表格:
已使用下列樣本資料。
Values:
Load
Rand() as A,
Rand() as B,
Rand() as C
AutoGenerate(50);
使用函數載入資料
在這些範例中,假定我們具有名稱為 P 的分析連線外掛程式,其中包含自訂函數 Calculate(Parameter1, Parameter2)。函數傳回表格結果,其中包含欄位 Field1 和 Field2。
Load * Extension P.Calculate( Values{A, C} );
載入在將欄位 A 和 C 傳送至函數時傳回的所有欄位。
Load Field1 Extension P.Calculate( Values{A, C} );
將欄位 A 和 C 傳送至函數時僅載入 Field1 欄位。
Load * Extension P.Calculate( Values );
載入在將欄位 A 和 B 傳送至函數時傳回的所有欄位。若沒有指定欄位,A 和 B 會作為表格中的第一順序使用。
Load * Extension P.Calculate( Values {C, C});
載入在將欄位 C 傳送至函數的兩個參數時傳回的所有欄位。
Load * Extension P.Calculate( Values {String(A), Mixed(B)});
載入在將強制作為字串的欄位 A 和強制作為數字的 B 傳送至函數時傳回的所有欄位。
評估指令碼以載入資料
Load A as A_echo, B as B_echo Extension R.ScriptEval( 'q;', Values{A, B} );
在傳送 A 和 B 的值時依指令碼 q 載入傳回的表格。
Load * Extension R.ScriptEval( '$(My_R_Script)', Values{A, B} );
在傳送 A 和 B 的值時依儲存於 My_R_Script 變數的指令碼載入傳回的表格。
Load * Extension R.ScriptEval( '$(My_R_Script)', Values{B as D, *} );
在傳送重新命名為 D、A 和 C 的 B 值時時依儲存於 My_R_Script 變數的指令碼載入傳回的表格。使用 * 傳送剩餘的未參考欄位。
在 Qlik Cloud 分析 中從空間載入檔案
在 Qlik Cloud 分析 中,在載入指令碼內從資料檔案載入資料時,可以使用 LOAD 陳述式或插入 QVS 程式碼。在這兩種情況下,都可以在指令碼陳述式中參考階層空間資料夾結構。按照有效空間資料夾路徑的規則。此外,該檔案和所有參考的資料夾需要已存在於指定位置。否則,載入會失敗。
範例: 參考空間上層路徑的檔案
該範例從個人空間中載入檔案 orders.csv。該檔案沒有位於任何特定資料夾中,而是位於空間中的上層路徑。
LOAD * FROM [lib://DataFiles/orders.csv];
此範例從共用、受管理或資料空間載入檔案 orders.csv。空間名稱是 TeamSharedSpace。該檔案沒有位於任何特定資料夾中,而是位於空間中的上層路徑。
LOAD * FROM [lib://TeamSharedSpace:DataFiles/orders.csv];
範例: 參考空間內的特定資料夾路徑
此範例從個人空間內的資料夾 Orders By Region 載入檔案 orders_Europe.csv。
LOAD * FROM [lib://DataFiles/Orders By Region/orders_Europe.csv];
此範例從共用、受管理或資料空間內的資料夾 Orders By Region 載入檔案 orders_Europe.csv。空間名稱是 SalesSpace。
LOAD * FROM [lib://SalesSpace:DataFiles/Orders By Region/orders_Europe.csv];
如需更多關於在載入指令碼中參考空間資料夾結構的資訊,請參閱 在應用程式和指令碼開發中參考空間資料夾結構。