適用於 PostgreSQL 的 Azure 資料庫 中的 Azure 儲存體 擴充功能 - 彈性伺服器
適用範圍:適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器
Microsoft客戶的常見使用案例是能夠在 Azure Blob 儲存體 與 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例之間匯入和導出數據。 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中的 Azure 儲存體 擴充功能azure_storage
可簡化此使用案例。
Azure Blob 儲存體
Azure Blob 儲存體是適用於雲端的物件儲存體解決方案。 Blob 儲存體經過最佳化,已能妥善儲存大量的非結構化資料。 「非結構化資料」是指不符合特定資料模型或定義的資料,例如文字或二進位資料。
Blob 記憶體提供三種資源類型的階層:
記憶體帳戶是一個系統管理實體,可保存 Blob、檔案、佇列、數據表或磁碟等項目的服務。
當您在 Azure 中建立記憶體帳戶時,您會取得記憶體資源的唯一命名空間。 唯一的命名空間會形成URL的一部分。 記憶體帳戶名稱在 Azure 中的所有現有記憶體帳戶名稱中應該是唯一的。
容器位於記憶體帳戶內。 容器就像儲存 Blob 的資料夾一樣。
您可以定義安全策略,並將原則指派給容器。 這些原則會串聯至容器中的所有 Blob。
記憶體帳戶可以包含無限數量的容器。 每個容器可以包含不限數量的 Blob,最多可達 500 TB 的記憶體帳戶大小上限。
將 Blob 放入記憶體帳戶內的容器之後,您可以使用下列格式的 URL 來參考 Blob:
protocol://<storage_account_name>/blob.core.windows.net/<container_name>/<blob_name>
。Blob 是位於容器中的數據片段。
下圖顯示資源之間的關係。
將數據儲存為 blob Azure Blob 儲存體 的主要優點
Azure Blob 儲存體 可以提供下列優點:
- 這是可調整且符合成本效益的雲端記憶體解決方案。 您可以使用它來儲存任何大小的數據,並根據需求相應增加或減少。
- 它提供一層安全性,以協助保護您的數據,例如待用加密和傳輸中。
- 它會與其他 Azure 服務和合作夥伴應用程式通訊。 它是各種使用案例的多功能解決方案,例如備份和災害復原、封存和數據分析。
- 這是一個符合成本效益的解決方案,無論組織是小型企業還是大型企業,都是在雲端中管理和儲存大量數據。 您只需支付所需的記憶體費用。
將數據從 Azure Blob 儲存體 匯入至 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器
若要從 Azure Blob 儲存體 載入數據,您必須允許列出azure_storage
PostgreSQL 擴充功能。 接著,您可以使用 命令在資料庫中 CREATE EXTENSION
安裝擴充功能:
CREATE EXTENSION azure_storage;
當您建立記憶體帳戶時,Azure 會為該帳戶產生兩個 512 位記憶體 帳戶存取密鑰 。 您可以使用這些金鑰,透過共用金鑰授權來授權存取記憶體帳戶中的數據。
您必須先使用 account_add
方法來對應記憶體帳戶,才能匯入數據。 提供您在建立帳戶時所定義的帳戶存取金鑰。 下列程式代碼範例會對應記憶體帳戶 mystorageaccount
,並使用字串 SECRET_ACCESS_KEY
作為存取金鑰參數:
SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');
對應記憶體之後,您可以列出記憶體帳戶內容,然後選擇要匯入的數據。 下列範例假設您已建立名為 的 mystorageaccount
記憶體帳戶,以及名為的 mytestblob
Blob 容器:
SELECT path, bytes, pg_size_pretty(bytes), content_type
FROM azure_storage.blob_list('mystorageaccount','mytestblob');
您可以使用 方法的正 SQL WHERE
則子句或 prefix
參數來篩選這個語句的 blob_list
輸出。 列出容器內容需要帳戶和存取金鑰,或是已啟用匿名存取的容器。
最後,您可以使用 COPY
語句或 blob_get
函式,將數據從 Azure Blob 儲存體 匯入現有的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器數據表。
使用 COPY 語句匯入數據
下列範例示範透過 COPY
命令,從位於相同 mystorageaccount
Azure 記憶體帳戶中 Blob 容器mytestblob
的 employee.csv 檔案匯入數據:
建立符合來源檔案架構的目標資料表:
CREATE TABLE employees ( EmployeeId int PRIMARY KEY, LastName VARCHAR ( 50 ) UNIQUE NOT NULL, FirstName VARCHAR ( 50 ) NOT NULL );
COPY
使用語句將數據複製到目標數據表。 指定第一個數據列是標頭。COPY employees FROM 'https://mystorageaccount.blob.core.windows.net/mytestblob/employee.csv' WITH (FORMAT 'csv', header);
使用 blob_get 函式匯入數據
函 blob_get
式會從 Blob 記憶體擷取檔案。 若要確定 blob_get
可以剖析數據,您可以傳遞具有對應至檔案中數據行之類型的值,或明確定義 子句中的數據 FROM
行。
您可以使用下列格式的 blob_get
函式:
azure_storage.blob_get(account_name, container_name, path)
下一個範例會使用 blob_get
函式,顯示相同來源與相同目標相同的動作:
INSERT INTO employees
SELECT * FROM azure_storage.blob_get('mystorageaccount','mytestblob','employee.csv',options:= azure_storage.options_csv_get(header=>true)) AS res (
CustomerId int,
LastName varchar(50),
FirstName varchar(50))
COPY
命令與blob_get
函式支援下列延伸名進行匯入:
檔案格式 | 描述 |
---|---|
.csv | PostgreSQL 所使用的逗號分隔值格式 COPY |
.tsv | Tab 分隔值,預設 PostgreSQL COPY 格式 |
binary | 二進位 PostgreSQL COPY 格式 |
text | 包含單一文字值的檔案(例如大型 JSON 或 XML) |
將數據從 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器匯出至 Azure Blob 儲存體
若要將數據從 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器匯出至 Azure Blob 儲存體,您需要允許列出azure_storage
延伸模組。 接著,您可以使用 命令在資料庫中CREATE EXTENSION
安裝 azure_storage
PostgreSQL 擴充功能:
CREATE EXTENSION azure_storage;
您建立儲存體帳戶時,Azure 會為該帳戶產生兩個 512 位元儲存體帳戶存取金鑰。 您可以使用這些金鑰,透過共用金鑰授權,或透過使用共用密鑰簽署的共用存取簽章 (SAS) 令牌,授權存取記憶體帳戶中的數據。
您必須先使用 account_add
方法來對應記憶體帳戶,才能匯入數據。 提供您在建立帳戶時所定義的帳戶存取金鑰。 下列程式代碼範例會對應記憶體帳戶 mystorageaccount
,並使用字串 SECRET_ACCESS_KEY
作為存取金鑰參數:
SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');
您可以使用 COPY
語句或 blob_put
函式,將數據從 適用於 PostgreSQL 的 Azure 資料庫 數據表匯出至 Azure Blob 儲存體。 下列範例示範透過 命令將數據從員工數據表導出至名為 employee2.csvCOPY
的新檔案。 檔案位於相同 mystorageaccount
Azure 記憶體帳戶的 Blob 容器mytestblob
中。
COPY employees
TO 'https://mystorageaccount.blob.core.windows.net/mytestblob/employee2.csv'
WITH (FORMAT 'csv');
同樣地,您可以透過函 blob_put
式從員工數據表導出數據,這可讓您更有限地控制導出的數據。 下列範例只會匯出數據表和的兩個數據 EmployeeId
LastName
行。 它會略過數據 FirstName
行。
SELECT azure_storage.blob_put('mystorageaccount', 'mytestblob', 'employee2.csv', res) FROM (SELECT EmployeeId,LastName FROM employees) res;
命令與函COPY
blob_put
式支援下列延伸名進行匯出:
檔案格式 | 描述 |
---|---|
.csv | PostgreSQL 所使用的逗號分隔值格式 COPY |
.tsv | Tab 分隔值,預設 PostgreSQL COPY 格式 |
binary | 二進位 PostgreSQL COPY 格式 |
text | 包含單一文字值的檔案(例如大型 JSON 或 XML) |
列出 Azure 儲存體 中的物件
若要列出 Azure Blob 儲存體 中的物件,您必須允許列出azure_storage
延伸模組。 接著,您可以使用 命令在資料庫中CREATE EXTENSION
安裝 azure_storage
PostgreSQL 擴充功能:
CREATE EXTENSION azure_storage;
您建立儲存體帳戶時,Azure 會為該帳戶產生兩個 512 位元儲存體帳戶存取金鑰。 您可以使用這些金鑰,透過共用金鑰授權,或透過使用共用密鑰簽署的 SAS 令牌,來授權存取記憶體帳戶中的數據。
您必須先使用 account_add
方法來對應記憶體帳戶,才能匯入數據。 提供您在建立帳戶時所定義的帳戶存取金鑰。 下列程式代碼範例會對應記憶體帳戶 mystorageaccount
,並使用字串 SECRET_ACCESS_KEY
作為存取金鑰參數:
SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');
Azure 儲存體 延伸模組會提供 blob_list
方法。 您可以使用此方法,以下欄格式列出 Blob 記憶體中的物件:
azure_storage.blob_list(account_name, container_name, prefix)
下列範例示範使用名為 mystorageaccount
的記憶體帳戶和名為 mytestbob
的 Blob 容器中的 方法,在 Azure 儲存體 blob_list
中列出物件。 容器中的檔案具有字串 employee
。
SELECT path, size, last_modified, etag FROM azure_storage.blob_list('mystorageaccount','mytestblob','employee');
將許可權指派給非管理帳戶,以從 Azure 儲存體 存取數據
根據預設,只有azure_pg_admin系統管理角色可以新增帳戶密鑰,並在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中存取記憶體帳戶。
您可以根據權限粒度,以兩種方式,將存取 Azure 儲存體 中資料的權限授與非管理 適用於 PostgreSQL 的 Azure 資料庫彈性伺服器使用者:
指派
azure_storage_admin
給非系統管理使用者。 此角色會隨著安裝 Azure 儲存體 擴充功能而新增。 下列範例會將此角色授與名為support
的非管理使用者:-- Allow adding/list/removing storage accounts GRANT azure_storage_admin TO support;
呼叫
account_user_add
函式。 下列範例會將許可權新增至 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中的角色support
。 這是更有限的許可權,因為它只會讓使用者存取名為的mystorageaccount
Azure 記憶體帳戶。SELECT * FROM azure_storage.account_user_add('mystorageaccount', 'support');
適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的系統管理使用者可以取得函式輸出account_list
中的記憶體帳戶和許可權清單。 此函式會顯示已定義存取金鑰的所有帳戶。
SELECT * FROM azure_storage.account_list();
當 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器管理員決定使用者不應該再有存取權時,系統管理員可以使用 account_user_remove
方法或功能來移除此存取權。 下列範例會從記憶體帳戶mystorageaccount
的存取中移除角色support
:
SELECT * FROM azure_storage.account_user_remove('mystorageaccount', 'support');
下一步
- 如果您沒有看到您想要使用的延伸模組,請告訴我們。 請在我們的意見反應論壇中投票表決現有的要求,或建立新的意見反應要求。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應