本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 S3 Select 搭配 Spark 以提升查詢效能
重要
Amazon S3 Select 不再提供給新客戶。Amazon S3 Select 的現有客戶可以繼續如常使用此功能。進一步了解
在 Amazon 5.17.0 版及更新EMR版本中,您可以在 Amazon EMR 上使用 S3 Select
S3 Select 支援使用 CSV和 JSON 檔案,使用 s3selectCSV
和 s3selectJSON
值來指定資料格式。如需詳細資訊和範例,請參閱 在您的程式碼中指定 S3 Select。
S3 Select 是否適合我的應用程式?
建議您在使用和不使用 S3 Select 的狀態下,對應用程式進行基準分析,以確認其是否適合您的應用程式。
利用下列的準則,來判斷您的應用程式是否可能使用 S3 Select:
-
您的查詢會篩選掉原始資料集一半以上的資料。
-
Amazon S3 與 Amazon EMR叢集之間的網路連線具有良好的傳輸速度和可用的頻寬。Amazon S3 不會壓縮HTTP回應,因此壓縮輸入檔案的回應大小可能會增加。
考量與限制
-
不支援使用客戶提供加密金鑰 (SSE-C) 和用戶端加密的 Amazon S3 伺服器端加密。
-
不支援
AllowQuotedRecordDelimiters
屬性。如果指定此屬性,查詢會失敗。 -
僅支援 CSV和 UTF-8 格式JSON的檔案。CSVs 不支援多行。
-
僅支援未壓縮的檔案或 gzip 檔案。
-
不支援 Spark CSV和JSON選項,例如
nanValue
、negativeInf
、positiveInf
和與損毀記錄相關的選項 (例如,Failfast 和 Dropmalformed 模式)。 -
不支援在十進位使用逗號 (,)。例如,不支援
10,000
但支援10000
。 -
不支援在最後一行的註解字元。
-
不會處理檔案尾端的空白行。
-
以下篩選條件不會下推至 Amazon S3:
-
彙總函數,例如
COUNT()
和SUM()
。 -
CAST()
屬性的篩選條件。例如:CAST(stringColumn as INT) = 1
。 -
含屬性的篩選條件為物件或很複雜。例如:
intArray[1] = 1, objectColumn.objectNumber = 1
。 -
篩選條件的值不是常值。例如
intColumn1 = intColumn2
-
僅在載明限制的情況下支援 S3 Select 支援的資料類型。
-
在您的程式碼中指定 S3 Select
下列範例示範如何使用 CSV Scala、、SQLR 和 指定 S3 Select PySpark。您可以用JSON相同的方式使用 的 S3 Select。如需了解選項清單、其預設值和限制,請參閱 選項。
選項
使用 s3selectCSV
和 s3selectJSON
時,有以下可用選項。若未指定,則會使用預設值。
具有 S3selectCSV 的選項
選項 | 預設 | 用量 |
---|---|---|
|
|
指出是否使用了壓縮。 |
|
"," |
指定欄位分隔符號。 |
|
|
指定引號字元。不支援指定空字串,並導致格式錯誤XML。 |
|
|
指定逸出字元。 |
|
|
|
comment |
|
指定註解字元。註解指標無法停用。換言之,不支援 |
|
"" |
具有 S3selectJSON 的選項
選項 | 預設 | 用量 |
---|---|---|
|
|
指出是否使用了壓縮。 |
|
"false" |
|