10 個使用 SQL 的 AWS 服務

埃文科技發表於2022-04-24

選擇哪個?

Amazon Web Services (AWS) 是世界上最大的雲平臺,擁有200 多項功能。在本文中,我們分解了 10 種至少支援某些 SQL 語法的 AWS 服務,討論它們的用例,並舉例說明如何編寫查詢。

服務描述SQL 支援用例
RDSPostgres、MySQL 等滿的中小型網路應用
極光無伺服器資料庫滿的無伺服器應用
紅移資料倉儲滿的OLAP、PB 級資料、分析
動態資料庫NoSQL 資料庫一些 - PartiSQL電子商務,快速構建
鍵空間託管 Cassandra(鍵值)一些 - CQL訊息傳遞
海王星圖資料庫一些 - openCypher社交網路
時間流時間序列資料庫部分的物聯網、日誌記錄
量子賬本加密驗證交易一些 - PartiSQL金融
雅典娜S3 上的即席查詢一些 - CTAS歷史資料
巴別魚Aurora 上的 MSFT SQL Server滿的。網

上表顯示了服務之間的 SQL 支援如何變化。圖形資料庫不能像經典關聯式資料庫那樣被查詢,各種 SQL 子集(如PartiQL)已經出現以適應這些模型。事實上,即使在標準 SQL 中,也有許多SQL 方言適用於不同的公司,如 Oracle 和 Microsoft。

AWS 資料庫服務

從關係到圖表到分類賬到時間序列,下面的服務幾乎涵蓋了所有可以想象的託管資料庫用例。讓我們檢查一下它們的用途以及如何針對它們編寫 SQL 查詢!

RDS

亞馬遜 RDS

Amazon RDS 是最基本的 AWS 資料庫服務之一,主要用於將您的資料庫管理操作解除安裝到平臺上。因此,它用於資料量有限的中小型企業,並且公司運營所需的功能不是太複雜。

Amazon RDS 支援MySQL、MariaDB、PostgreSQL、Oracle 和 Microsoft SQL Server 等資料庫引擎。它配備了使用 SSH 保護您的 RDS 例項的工作流程,並提供了一個簡單的雲控制檯用於連線。

好處

  1. Amazon RDS 是最便宜的服務,因為它易於使用且不復雜。
  2. 它具有高度可擴充套件性,允許您擴充套件到 32 個 vCPU 和 244 Gb RAM。
  3. 該服務也易於使用且速度非常快。

示例 SQL

RDS 只是圍繞核心資料庫的一些不錯的管理選項,因此它支援每個資料庫支援的確切 SQL。這是一個可以針對 Postgres、MySQL 或 Oracle 執行的子查詢。

SELECT
    *
FROM
    users
WHERE
    id IN (
        SELECT
            user_id
        FROM
            transactions
        WHERE
            amount > 1000
    );

AWS 極光

亞馬遜極光

Amazon Aurora 是 Amazon RDS 的升級版本。大型企業使用它,因為它們的資料量和操作複雜性要高得多。它不支援與 Amazon RDS 相同的所有資料庫引擎,而是僅支援 MySQL 和 PostgreSQL。Aurora 會隨著資料庫負載的增加和減少而向上和向下擴充套件。PlanetScale等較新的提供商也提供此功能,具有額外的架構遷移功能和更低的成本。

Amazon Aurora 與 RDS 一樣,可以執行復制。它實際上提供了大約 15 種不同型別的複製,一個複製可以在幾毫秒內完成。另一方面,RDS 只能執行五種型別的複製,需要更多時間。

可以描述 Amazon Aurora 實力的一些用例是企業應用程式、SaaS 應用程式和 Web/移動遊戲。

好處

  1. 自動縮放允許在不影響資料庫效能的情況下自動執行縮放操作。它允許每個資料庫例項最多 128 TB。
  2. Aurora 備份操作是自動的、連續的、增量的,並且具有大約 99.99999999% 的永續性。
  3. Aurora 可以在不到一分鐘的時間內檢測到資料庫故障並恢復。此外,在發生永久性故障的情況下,它可以自動移動到副本而不會丟失資料。

紅移

亞馬遜紅移

與 Amazon Aurora 一樣,大型企業也使用 Amazon Redshift。但是,Redshift 更復雜,可以處理更多的資料,被稱為資料倉儲。這是因為 Redshift 是為 OLAP(線上分析處理)構建的。

此外,Redshift 可以擴充套件到 PB 級的資料,每個叢集最多支援 60 個使用者定義的資料庫。另一方面,Aurora 只能擴充套件到 TB,最多支援 40 個。除此之外,兩種資料庫服務的安全性和維護性幾乎相同。

Amazon Redshift 的一些用例是建立機器模型以預測運營、最佳化公司的商業智慧並提高開發人員的工作效率。

好處

  1. 在我們檢查過的三個選項中,Redshift 擁有最高的擴充套件能力。
  2. 它的效能更快,更耐用。
  3. Amazon Redshift 還可以處理更大量的資料並在更短的時間內對其進行分析。

示例 SQL

Redshift 支援一些通常只有大型資料倉儲應用程式才需要的 SQL 函式和查詢。例如,PERCENTILE_CONT計算線性插值以返回百分位數。

SELECT
    TOP 10 salesid,
    sum(pricepaid),
    percentile_cont(0.6) WITHIN GROUP (
        ORDER BY 
            salesid
    ),
    median (salesid)
FROM
    sales
GROUP BY
    salesid,
    pricepaid;

動態資料庫

亞馬遜動態資料庫

DynamoDB是亞馬遜對 MongoDB 的回應,MongoDB 是一種適用於 JSON 文件的NoSQL 資料庫。這些資料庫嚴重依賴巢狀資料,並且不會強制執行任何嚴格的模式,除非開發人員開啟該選項。這意味著 DynamoDB 非常適合 CMS 等大容量站點或具有大量流量的移動應用程式。例如,美國職業棒球大聯盟和 Duolingo都使用 DynamoDB。

示例 SQL

因為 DynamoDB 不是關係型資料庫,並且預設情況下不強制執行ACID,所以它必須使用標準 SQL 的修改版本。Amazon 開發了一種名為PartiQL的查詢語言,它使用許多 SQL 概念,但專為高度巢狀的資料而構建。下面的查詢以相對 SQL 標準的方式利用了 DynamoDB 的鍵值基礎。

UPDATE
    Music
SET
    AwardsWon = 1
SET
    AwardDetail = { 'Grammys': [ 2020, 2018 ] }
WHERE
    Artist = 'Acme Band'
    AND SongTitle = 'PartiQL Rocks'

鍵空間

AWS 徽標

Cassandra 是著名的分散式鍵值資料庫。iMessage 雖然在客戶端使用 SQLite,但透過 Apple 的大型 Cassandra 叢集傳送所有訊息。其他構建具有高容錯需求的分散式服務的開發人員也可能會考慮使用 Cassandra,儘管他們不想為管理大型叢集而頭疼。這就是 AWS Keyspaces 透過證明託管 Cassandra 發揮作用的地方。

示例 SQL

Cassandra 專案開發了自己的 SQL 子集,稱為 CQL,它使用鍵空間、表、分割槽、行和列的概念來查詢資料。下面的例子是一個 CQL 指令,它使用 Cassandra 著名的容錯來恢復某個時間點的鍵空間。

RESTORE TABLE mykeyspace.mytable_restored
FROM TABLE mykeyspace.my_table 
WITH restore_timestamp = '2020-06-30T04:05:00+0000'
AND custom_properties = { 
    'point_in_time_recovery': { 'status' :'disabled' },
    'capacity_mode': { 
        'throughput_mode': 'PROVISIONED',
        'read_capacity_units': 10,
        'write_capacity_units': 20 
        }
    }
AND TAGS = { 
    'key1' :'val1',
    'key2' :'val2' 
};

AWS 海王星

AWS 海王星

最著名的圖資料庫可能是 Neo4j,但對於 AWS 生態系統中的開發人員來說,Neptune 可以填補這個角色。圖資料庫對於建模網路中 N 個專案之間的關係非常有幫助。社交網路是一個顯而易見的應用,但欺詐檢測甚至基礎設施管理也是圖資料庫的良好用例。Neo4j 開發了一種名為 openCypher 的開源圖形查詢語言,AWS Neptune 支援該語言。

示例 SQL

如您所見,將以下查詢稱為 SQL 查詢有點仁慈。事實上,openCypher 語言可能是這裡最奇特的 SQL 語言。在此查詢中,我們定義了兩個機場之間的路線。這基本上是一個INSERT. 稍後,我們可以在票務系統中查詢機場之間的最佳路線選擇。

MATCH (a:airport {code:'SEA'}), (b:airport {code:'ANC'}),
CREATE (a)-[r:route]->(b)
RETURN r

時間流

亞馬遜時間流

由於無限日誌記錄、物聯網、區塊鏈和金融科技的出現,時間序列資料庫越來越受歡迎。時間序列資料庫試圖隱藏跨日期範圍查詢、儲存無限歷史資料和保持當前資料最新的痛苦。壓縮通常是使用時間序列資料庫的關鍵指標。

AWS Timestream 專門幫助管理此資料的生命週期,還與您可能期望的其他 AWS 服務整合,包括 AWS IoT Core!

示例SQL

在對時間序列資料進行查詢時,我們大量使用公用表表示式 (CTE) 和聚合。AWS Timestream 支援許多有用的函式,使這些查詢更容易,因為您想在 SQL 中實現線性插值嗎?在下面的查詢中,我們發現特定 EC2 主機在過去 2 小時內以 30 秒的時間間隔劃分的平均 CPU 利用率,使用線性插值填充缺失值。然後可以將這些資料顯示在方便的折線圖上或以其他方式用於服務監控。

WITH binned_timeseries AS (
    SELECT
        hostname,
        BIN(time, 30s) AS binned_timestamp,
        ROUND(AVG(measure_value: :double), 2) AS avg_cpu_utilization
    FROM
        "sampleDB" .DevOps
    WHERE
        measure_name = 'cpu_utilization'
        AND hostname = 'host-Hovjv'
        AND time > ago(2h)
    GROUP BY
        hostname,
        BIN(time, 30s)
),
interpolated_timeseries AS (
    SELECT
        hostname,
        INTERPOLATE_LINEAR(
            CREATE_TIME_SERIES(binned_timestamp, avg_cpu_utilization),
            SEQUENCE(min(binned_timestamp), max(binned_timestamp), 15s)
        ) AS interpolated_avg_cpu_utilization
    FROM
        binned_timeseries
    GROUP BY
        hostname
)
SELECT
    time,
    ROUND(value, 2) AS interpolated_cpu
FROM
    interpolated_timeseries
    CROSS JOIN UNNEST(interpolated_avg_cpu_utilization)

量子賬本 (QLDB)

QLDB

QLDB 是一個龐大的分類賬或金融事件的歷史。銀行或人口普查局等組織使用分類賬來確保無論他們的資料發生什麼情況,他們都可以絕對確定記錄。我們將注意到 AWS 文件努力不使用術語區塊鏈。的確,如果 QLDB 分佈在世界各地並開放訪問,它將非常接近比特幣。

QLDB 的關鍵屬性是它是不可變的。沒辦法,資料庫的提交日誌怎麼能被修改。如果是,分類帳可以報告此情況或拒絕處理其他交易。QLDB 的基礎是一種名為 AWS Ion 的類似 JSON 的資料結構。我們之前看到了 PartiQL 如何為高度巢狀的資料提供一種 SQL 式查詢語言。下面的示例將一條記錄插入 QLDB 以跟蹤車輛登記。

示例 SQL

一旦這條記錄被輸入到賬本中,它就變得不可變,並且在不插入新記錄的情況下無法更改。換句話說,UPDATE對於 QLDB 真的沒有概念。

INSERT INTO VehicleRegistration VALUE
{
    'VIN' : 'KM8SRDHF6EU074761', --string
    'RegNum' : 1722, --integer
    'State' : 'WA',
    'City' : 'Kent',
    'PendingPenaltyTicketAmount' : 130.75, --decimal
    'Owners' : { --nested struct
        'PrimaryOwner' : { 'PersonId': '294jJ3YUoH1IEEm8GSabOs' },
        'SecondaryOwners' : [ --list of structs
            { 'PersonId' : '1nmeDdLo3AhGswBtyM1eYh' },
            { 'PersonId': 'IN7MvYtUjkp1GMZu0F6CG9' }
        ]
    },
    'ValidFromDate' : `2017-09-14T`, --Ion timestamp literal with day precision
    'ValidToDate' : `2020-06-25T`
}

AWS 雅典娜

亞馬遜雅典娜

您是否曾經只是將資料推送到 S3 中而忘記了它?S3 通常儲存數 TB 的 JSON、CSV、文字或其他非結構化資料。AWS Athena 是一種 SQL 服務,用於從 S3 中提取資料並將其推送到關係結構中。它非常適合檢查儲存桶、透過 ETL 流程轉換資料或清理資料以傳送到 Hadoop 等服務。它還與DataStation相容。

還有另一種使用名為 S3 Select 的服務查詢 S3 的方法。有關此主題的更多資訊即將釋出到 Arctype 部落格!Athena 比 S3 Select 更靈活,因為它可以在同一個查詢中觸及多個物件和儲存桶。這也稱為進行“臨時”查詢。

示例 SQL

AWS Athena 的關鍵概念稱為從查詢結果建立表 (CTAS)。很明顯,在查詢S3之前是不存在表的,所以我們需要利用INSERT INTO拉取資料的時候來建表。在下面的查詢中,我們根據 S3 儲存桶中的 CSV 繪製 2015 年之前的日期。

INSERT INTO new_parquet
SELECT id,
         date,
         element,
         datavalue,
         mflag,
         qflag,
         sflag,
         obstime,
         substr("date",1,4) AS year
FROM original_csv
WHERE cast(substr("date",1,4) AS bigint) < 2015

用於 Aurora PostgreSQL 的 Babelfish

巴別魚

如果不將 Babelfish 列為此列表中的最後一個 SQL 服務,我們將是失職的。從技術上講,Babelfish 更像是一種技術,而不是成熟的資料庫,但它接受 SQL 查詢,所以我們開始吧!

使用Babelfish,您可以將您在 Microsoft 生態系統中編寫的應用程式(例如使用 .NET 和 TSQL)連線到由 Postgres 支援的 AWS Aurora。儘管我們會注意到限制和陷阱的列表似乎相當長,但對於擁有大量程式碼庫並使用 TSQL 的組織來說,這實際上是比重寫每個查詢以支援 Postgres 更容易的遷移路徑。

示例查詢

這裡只是一個簡單的。此查詢不會在 Postgres 中執行,因為它使用 Microsoft 特定的語法。然而,使用 Aurora 支援的 Babelfish,它將返回正確的結果。

SELECT @@VERSION AS version;

完全託管的資料庫與管理伺服器

上述所有選項都屬於 AWS 軟體正在執行繁重的配置、備份、橫向擴充套件、升級以及與運算元據庫相關的其他任務的類別。當然,您可以將上述所有軟體託管在您自己的伺服器上並自己執行此操作。

彈性計算雲幾乎與 AWS Managed Services (AMS) 相反。它被建立為虛擬機器以同時建立多個例項。每個例項都可以根據您的要求和需要執行作業系統或軟體包。雖然涉及 Auto Scaling 等功能,但使用者仍需自行執行安全、資源利用、維護等重要功能。這導致了另一組優點和缺點:

優點: 

  • 它具有高度可擴充套件性。
  • 它與大多數 AWS 服務整合。
  • API 的存在使您的操作非常容易。
  • 您可以完全控制例項。

缺點:

  • 您必須檢視公共例項的安全性。
  • 管理生命週期的資源利用、維護和管理可能會變得非常乏味。
  • 在特定場景下,EC2 對公司來說並不具有成本效益。

結論

這是對用於資料庫和編寫 SQL 的 AWS 資料庫服務的(相當)完整的概述。所有這些都允許您透過 SQL 操作和查詢資料,這使得它們易於使用,同時還具有高度可擴充套件性。突出的一件事是架構、語法和目標用例的多樣性。這說明了亞馬遜產品的深度和雲端計算市場的規模。振作起來,您在一個每年增長 40% 的行業工作!


相關文章