Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Aşağıda, Azure Depolama uzantısını kullanmayı öğrenmenize yardımcı olacak örneklerin listesi verilmiştir.
Azure Depolama hesabı oluşturma ve bunu verilerle doldurma
- Bir Azure Depolama hesabı oluşturun.
Azure Depolama hesabı oluşturmak için, henüz bir hesabınız yoksa ,
<resource_group>,<location>ve<account_name>değerlerini<container_name>özelleştirin ve aşağıdaki Azure CLI komutunu çalıştırın:random_suffix=$(tr -dc 'a-z0-9' </dev/urandom | head -c8) resource_group="resource-group-$random_suffix" location="eastus2" storage_account="storageaccount$random_suffix" blob_container="container-$random_suffix" az group create --name $resource_group --location $location az storage account create --resource-group $resource_group --name $storage_account --location $location --sku Standard_LRS --kind BlobStorage --public-network-access enabled --access-tier hot echo "Take note of the storage account name, which you'll have to replace in subsequent examples, whenever you find a reference to <account_name>:" echo $storage_account echo "Take note of the container name, which you'll have to replace in subsequent examples, whenever you find a reference to <container_name>:" echo $blob_container - Blob kapsayıcısı oluşturma.
Blob kapsayıcısını oluşturmak için aşağıdaki Azure CLI'yi çalıştırın:
az storage container create --account-name $storage_account --name $blob_container -o tsv - Depolama hesabına atanan iki erişim anahtarından birini getirin. sonraki bir adımda azure_storage.account_add öğesine bağımsız değişken olarak geçirmeniz gerektiğinden access_key değerini kopyaladığınızdan emin olun.
İki erişim anahtarından ilkini getirmek için aşağıdaki Azure CLI komutunu çalıştırın:
access_key=$(az storage account keys list --resource-group $resource_group --account-name $storage_account --query [0].value) echo "Following is the value of your access key:" echo $access_key - Örnekler sırasında kullanılan veri kümesini içeren dosyayı indirin ve blob kapsayıcınıza yükleyin.
Veri kümesini içeren dosyayı indirmek için aşağıdaki Azure CLI komutunu çalıştırın:
mkdir --parents azure_storage_examples cd azure_storage_examples curl -L -O https://github.com/Azure-Samples/azure-postgresql-storage-extension/raw/main/storage_extension_sample.parquet az storage blob upload-batch --account-name $storage_account --destination $blob_container --source . --pattern "storage_extension_sample.parquet" --account-key $access_key --overwrite --output none --only-show-errors curl -L -O https://github.com/Azure-Samples/azure-postgresql-storage-extension/raw/main/parquet_without_extension az storage blob upload-batch --account-name $storage_account --destination $blob_container --source . --pattern "parquet_without_extension" --account-key $access_key --overwrite --output none --only-show-errors curl -L -O https://github.com/Azure-Samples/azure-postgresql-storage-extension/raw/main/storage_extension_sample.csv az storage blob upload-batch --account-name $storage_account --destination $blob_container --source . --pattern "storage_extension_sample.csv" --account-key $access_key --overwrite --output none --only-show-errors curl -L -O https://github.com/Azure-Samples/azure-postgresql-storage-extension/raw/main/csv_without_extension az storage blob upload-batch --account-name $storage_account --destination $blob_container --source . --pattern "csv_without_extension" --account-key $access_key --overwrite --output none --only-show-errors
Uyarı
Kapsayıcıları veya belirli bir depolama hesabı için içinde depolanan blobları listeleyebilirsiniz, ancak yalnızca PostgreSQL kullanıcınıza veya rolüne azure_storage.account_user_add kullanarak söz konusu depolama hesabına başvuru izni verildiğinde. Rolün üyelerine azure_storage_admin, azure_storage.account_add kullanılarak eklenen tüm Azure Depolama hesaplarına göre bu ayrıcalık verilir. Varsayılan olarak, rolü yalnızca üyelerine azure_pg_adminazure_storage_admin verilir.
Verilerin yüklendiği bir tablo oluşturma
Şimdi depolama hesabına yüklediğimiz dosyaların içeriğini içeri aktardığımız tabloyu oluşturalım. Bunu yapmak için , Visual Studio Code için PostgreSQL (Önizleme), psql, PgAdmin veya tercihinizin istemcisini kullanarak PostgreSQL için Azure Veritabanı esnek sunucunuza bağlanın ve aşağıdaki deyimi yürütun:
CREATE TABLE IF NOT EXISTS sample_data (
id BIGINT PRIMARY KEY,
sample_text TEXT,
sample_integer INTEGER,
sample_timestamp TIMESTAMP
);
Uzantıyı kullanıma hazırlama
Devam etmeden önce şunları yaptığınızdan emin olun:
Depolama hesabının erişim anahtarını ekleme
Bu örnekte, PostgreSQL için Azure Veritabanı esnek sunucunuzdaki uzantı tarafından azure_storage sağlanan işlevsellik aracılığıyla içeriğine erişmek için gereken depolama hesabının erişim anahtarıyla birlikte depolama hesabına nasıl başvuru ekleneceği gösterilmektedir.
<account_name> depolama hesabınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız bu değer, bu betiklerde storage_account ortam değişkenine ayarladığınız değerle eşleşmelidir.
Benzer şekilde, <access_key> depolama hesabınızdan getirdiğiniz değere ayarlanmalıdır.
SELECT azure_storage.account_add('<account_name>', '<access_key>');
Tavsiye
Depolama hesabı adını ve erişim anahtarlarından birini Azure portalından almak istiyorsanız, depolama hesabınızı arayın, kaynak menüsünde Erişim anahtarları'nı seçin, Depolama hesabı adını kopyalayın ve Anahtar1 bölümünden Anahtarı kopyalayın (önce anahtarın yanındaki Göster'i seçmeniz gerekir).
Azure Blob depolama başvurusunda bir kullanıcıya veya role erişim izni verme
Bu örnekte, böyle bir PostgreSQL kullanıcısının başvurulan Azure depolama hesabı tarafından barındırılan kapsayıcılarda depolanan bloblara erişmek için uzantıyı kullanabilmesi <regular_user> için adlı azure_storagebir kullanıcıya veya role nasıl erişim verebileceğiniz gösterilmektedir.
<account_name> depolama hesabınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız bu değer, bu betiklerde storage_account ortam değişkenine ayarladığınız değerle eşleşmelidir.
<regular_user> mevcut bir kullanıcı veya rolün adına ayarlanmalıdır.
SELECT * FROM azure_storage.account_user_add('<account_name>', '<regular_user>');
Kapsayıcıdaki tüm blobları listeleme
Bu örnek, depolama hesabı <container_name>kapsayıcısı <account_name> içindeki tüm mevcut blobların nasıl liste yapılacağını gösterir.
<account_name> depolama hesabınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız bu değer, bu betiklerde storage_account ortam değişkenine ayarladığınız değerle eşleşmelidir.
<container_name> blob kapsayıcınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız, bu değer bu betiklerde blob_container ortam değişkenine ayarladığınız değerle eşleşmelidir.
SELECT * FROM azure_storage.blob_list('<account_name>','<container_name>');
Belirli bir ad ön ekiyle blobları listeleme
Bu örnekte, blob adı ile <container_name>başlayan depolama hesabı <account_name>kapsayıcısı <blob_name_prefix> içindeki tüm mevcut blobların nasıl listeldiği gösterilmektedir.
<account_name> depolama hesabınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız bu değer, bu betiklerde storage_account ortam değişkenine ayarladığınız değerle eşleşmelidir.
<container_name> blob kapsayıcınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız, bu değer bu betiklerde blob_container ortam değişkenine ayarladığınız değerle eşleşmelidir.
<blob_name_prefix> blobların adlarına eklenmesini istediğiniz önek olarak ayarlanmalıdır. Tüm blobları döndürmek istiyorsanız, bu parametreyi boş bir dizeye ayarlayabilir veya bu parametre için bir değer belirtmeyebilirsiniz; bu durumda değer varsayılan olarak boş bir dizedir.
SELECT * FROM azure_storage.blob_list('<account_name>','<container_name>','<blob_name_prefix>');
Alternatif olarak, aşağıdaki söz dizimini kullanabilirsiniz:
SELECT * FROM azure_storage.blob_list('<account_name>','<container_name>') WHERE path LIKE '<blob_name_prefix>%';
COPY FROM deyimini kullanarak verileri içeri aktarma
Aşağıdaki örnekte, komutunu kullanarak Azure Depolama hesabındaki blob kapsayıcısında storage_extension_sample.parquet bulunan adlı <container_name> bir blobdan veri içeri aktarma işlemi gösterilmektedir<account_name>:COPY
Kaynak dosyanın şemasıyla eşleşen bir tablo oluşturun:
CREATE TABLE IF NOT EXISTS sample_data ( id BIGINT PRIMARY KEY, sample_text TEXT, sample_integer INTEGER, sample_timestamp TIMESTAMP );Verileri hedef tabloya kopyalamak için deyimini
COPYkullanın. Biçim, dosyanın uzantısından Parquet olarak çıkarılır.TRUNCATE TABLE sample_data; COPY sample_data FROM 'https://<account_name>.blob.core.windows.net/<container_name>/storage_extension_sample.parquet';Verileri hedef tabloya kopyalamak için deyimini
COPYkullanın. Kodlama biçimi dosya uzantısından çıkarılamadığından, seçeneği aracılığıylaFORMATaçıkça belirtilir.TRUNCATE TABLE sample_data; COPY sample_data FROM 'https://<account_name>.blob.core.windows.net/<container_name>/parquet_without_extension' WITH (FORMAT 'parquet');Verileri hedef tabloya kopyalamak için deyimini
COPYkullanın. Kodlama biçimi dosya uzantısından çıkarılabilir. Ancak, ilk satırdaki sütun üst bilgilerinin varlığı seçenek aracılığıylaHEADERSaçıkça yapılandırılmalıdır.TRUNCATE TABLE sample_data; COPY sample_data FROM 'https://<account_name>.blob.core.windows.net/<container_name>/storage_extension_sample.csv' WITH (HEADERS);Verilerin tabloya yüklendiğini onaylamak için aşağıdaki
SELECTdeyimi yürütür.SELECT * FROM sample_data LIMIT 100;
COPY TO deyimini kullanarak verileri dışarı aktarma
Aşağıdaki örneklerde, adlı sample_databir tablodaki verilerin farklı adlara sahip birden çok bloba dışarı aktarıldığı ve bunların kodlama biçimi gibi özelliklerinin tümü Azure Depolama hesabındaki <account_name>blob kapsayıcısında <container_name> bulunan komutuyla COPY gösterilmiştir:
Kaynak dosyanın şemasıyla eşleşen bir tablo oluşturun:
CREATE TABLE IF NOT EXISTS sample_data ( id BIGINT PRIMARY KEY, sample_text TEXT, sample_integer INTEGER, sample_timestamp TIMESTAMP );Tabloya veri yükleyin. Insert deyimlerini çalıştırarak birkaç yapay satırla doldurun veya COPY FROM deyimi kullanarak verileri içeri aktar örneğini kullanarak örnek veri kümesinin içeriğiyle doldurun.
Hedef tablodan veri kopyalamak için deyimini
COPYkullanın. Kodlama biçiminin parquet olması gerektiğini belirtin.COPY sample_data TO 'https://<account_name>.blob.core.windows.net/<container_name>/storage_extension_sample_exported.parquet' WITH (FORMAT 'parquet');Hedef tablodan veri kopyalamak için deyimini
COPYkullanın. Kodlama biçiminin CSV olması gerektiğini ve sonuçta elde edilen dosyanın ilk satırının sütun üst bilgileri içerdiğini belirtin.COPY sample_data TO 'https://<account_name>.blob.core.windows.net/<container_name>/storage_extension_sample_exported.csv' WITH (FORMAT 'csv', HEADERS);Blob'un depolama hesabında mevcut olduğunu onaylamak için aşağıdaki
SELECTdeyimi yürütebilirsiniz.SELECT * FROM azure_storage.blob_list('<account_name>','<container_name>') WHERE path LIKE 'storage_extension_sample_exported%';
Blobdan içerik okuma
İşlev, blob_get depolamanın başvuruda bulunan kapsayıcısında <container_name> belirli bir blobun <account_name> içeriğini alır. Verilerin nasıl ayrıştırıldığını bilmek için blob_get biçiminde NULL::table_namebir değer geçirebilirsiniz. Burada table_name , şeması okunan blobla eşleşen bir tabloya başvurur. Örnekte, en başında oluşturduğumuz tabloya başvurur sample_data .
<account_name> depolama hesabınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız bu değer, bu betiklerde storage_account ortam değişkenine ayarladığınız değerle eşleşmelidir.
<container_name> blob kapsayıcınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız, bu değer bu betiklerde blob_container ortam değişkenine ayarladığınız değerle eşleşmelidir.
<blob_name> içeriğini okumak istediğiniz blobun tam yoluna ayarlanmalıdır.
Bu durumda, blobu ayrıştırmak için kullanılması gereken kod çözücü dosya uzantısından .parquet çıkarılır.
SELECT * FROM azure_storage.blob_get
('<account_name>'
,'<container_name>'
,'storage_extension_sample.parquet'
, NULL::sample_data)
LIMIT 5;
Alternatif olarak, AS işlevinden sonraki yan tümcesini kullanarak sonucun şemasını açıkça tanımlayabilirsiniz.
SELECT * FROM azure_storage.blob_get('<account_name>','<container_name>','storage_extension_sample.parquet')
AS res (
id BIGINT PRIMARY KEY,
sample_text TEXT,
sample_integer INTEGER,
sample_timestamp TIMESTAMP)
LIMIT 5;
Blobdan okunan içeriği okuma, filtreleme ve değiştirme
Bu örnekte, blobdan içeri aktarılan içeriği sql tablosuna yüklemeden önce filtreleme ve değiştirme olanağı gösterilmektedir.
<account_name> depolama hesabınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız bu değer, bu betiklerde storage_account ortam değişkenine ayarladığınız değerle eşleşmelidir.
<container_name> blob kapsayıcınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız, bu değer bu betiklerde blob_container ortam değişkenine ayarladığınız değerle eşleşmelidir.
SELECT concat('P-',id::text) FROM azure_storage.blob_get
('<account_name>'
,'<container_name>'
,'storage_extension_sample.parquet'
, NULL::sample_data)
WHERE sample_integer=780
LIMIT 5;
Özel seçeneklerle dosyadan içerik okuma (üst bilgiler, sütun sınırlayıcıları, kaçış karakterleri)
Bu örnekte, bağımsız değişkene options_copyoptions sonucunu geçirerek özel ayırıcıları ve kaçış karakterlerini nasıl kullanabileceğiniz gösterilmektedir.
<account_name> depolama hesabınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız bu değer, bu betiklerde storage_account ortam değişkenine ayarladığınız değerle eşleşmelidir.
<container_name> blob kapsayıcınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız, bu değer bu betiklerde blob_container ortam değişkenine ayarladığınız değerle eşleşmelidir.
SELECT * FROM azure_storage.blob_get
('<account_name>'
,'<container_name>'
,'storage_extension_sample.csv'
,NULL::sample_data
,options := azure_storage.options_csv_get(header := 'true')
);
Kod çözücü seçeneğini kullanma
Bu örnekte seçeneğin kullanımı gösterilmektedir decoder . Kod çözücü seçeneği mevcut olmadığında, dosyanın uzantısından çıkarılır. Ancak dosya adında bir uzantı yoksa veya bu dosya adı uzantısı, dosyanın içeriğini düzgün ayrıştırmak için kullanılması gereken kod çözücüyle ilişkili dosyaya karşılık gelmiyorsa, kod çözücü bağımsız değişkenini açıkça geçirebilirsiniz.
<account_name> depolama hesabınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız bu değer, bu betiklerde storage_account ortam değişkenine ayarladığınız değerle eşleşmelidir.
<container_name> blob kapsayıcınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız, bu değer bu betiklerde blob_container ortam değişkenine ayarladığınız değerle eşleşmelidir.
SELECT * FROM azure_storage.blob_get
('<account_name>'
,'<container_name>'
,'parquet_without_extension'
, NULL::sample_data
, decoder := 'parquet')
LIMIT 5;
Blobun içeriği üzerinde işlem toplamaları
Bu örnekte, blobun içeriğini PostgreSQL tablolarına aktarmaya gerek kalmadan bir blob kapsayıcısında depolanan bilgiler üzerinde toplama işlemlerini nasıl yapabileceğiniz gösterilmektedir.
<account_name> depolama hesabınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız bu değer, bu betiklerde storage_account ortam değişkenine ayarladığınız değerle eşleşmelidir.
<container_name> blob kapsayıcınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız, bu değer bu betiklerde blob_container ortam değişkenine ayarladığınız değerle eşleşmelidir.
SELECT sample_integer, COUNT(*) FROM azure_storage.blob_get
('<account_name>'
,'<container_name>'
,'storage_extension_sample.parquet'
, NULL::sample_data)
GROUP BY sample_integer
ORDER BY 2 DESC
LIMIT 5;
Bloba içerik yazma
İşlev, blob_put belirli bir blobun (sample_data_copy.parquet bu örnekte) içeriğini oluşturur ve depolamanın başvuruda bulunan kapsayıcısına <container_name><account_name> yükler. Bu örnek, beş satırdan oluşan bir küme oluşturmak için kullanır blob_get ve daha sonra bunları adlı blob_putbir blob olarak karşıya yükleyen toplama işlevine sample_data_copy.parquet geçirilir.
<account_name> depolama hesabınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız bu değer, bu betiklerde storage_account ortam değişkenine ayarladığınız değerle eşleşmelidir.
<container_name> blob kapsayıcınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız, bu değer bu betiklerde blob_container ortam değişkenine ayarladığınız değerle eşleşmelidir.
Kodlama biçimi, dosya uzantısına .parquetgöre parquet olarak çıkarılır.
SELECT azure_storage.blob_put
('<account_name>'
,'<container_name>'
,'sample_data_copy.parquet'
, top_5_sample_data)
FROM (SELECT * FROM sample_data LIMIT 5) AS top_5_sample_data;
Kodlama biçimi, dosya uzantısına .csvgöre CSV olarak çıkarılır.
SELECT azure_storage.blob_put
('<account_name>'
,'<container_name>'
,'sample_data_copy.csv'
, top_5_sample_data)
FROM (SELECT * FROM sample_data LIMIT 5) AS top_5_sample_data;
Dosyanın dosya uzantısı olmadığından kodlama biçimi çıkarılamıyor, bu nedenle açıkça olarak parquetyapılandırılır. Ayrıca, sıkıştırma algoritması olarak zstdayarlanır.
SELECT azure_storage.blob_put
('<account_name>'
,'<container_name>'
,'sample_parquet_data_copy_without_extension_with_zstd_compression'
, top_5_sample_data
,'parquet'
,'zstd')
FROM (SELECT * FROM sample_data LIMIT 5) AS top_5_sample_data;
Azure depolama hesaplarına yapılan tüm başvuruları listeleme
Bu örnekte, uzantının azure_storage bu veritabanında hangi Azure depolama hesaplarına başvurabileceği ve her depolama hesabına erişmek için kullanılan kimlik doğrulaması türü ve uzantı tarafından sağlanan işlevler aracılığıyla bu Azure depolama hesabına erişmek için azure_storage.account_user_add işlevi aracılığıyla hangi kullanıcılara veya rollere izin verildiği gösterilmektedir.
SELECT * FROM azure_storage.account_list();
Azure Blob depolama başvurusunda kullanıcı veya rolden erişimi iptal etme
Bu örnekte, bu tür PostgreSQL kullanıcılarının başvurulan Azure depolama hesabı tarafından barındırılan kapsayıcılarda depolanan bloblara erişmek için uzantıyı kullanamamaları <regular_user> için adlı azure_storagekullanıcı veya rolden erişimin nasıl iptal edildiği gösterilmektedir.
<account_name> depolama hesabınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız bu değer, bu betiklerde storage_account ortam değişkenine ayarladığınız değerle eşleşmelidir.
<regular_user> mevcut bir kullanıcı veya rolün adına ayarlanmalıdır.
SELECT * FROM azure_storage.account_user_remove('<account_name>', '<regular_user>');
Depolama hesabına başvuruyu kaldırma
Bu örnekte, geçerli veritabanındaki hiçbir kullanıcının söz konusu depolama hesabına erişmek için uzantı işlevini kullanabilmesi azure_storage için bir depolama hesabına yapılan tüm başvuruların nasıl kaldırılacağı gösterilmektedir.
<account_name> depolama hesabınızın adına ayarlanmalıdır. Önceki betikleri kullandıysanız bu değer, bu betiklerde storage_account ortam değişkenine ayarladığınız değerle eşleşmelidir.
SELECT azure_storage.account_remove('<account_name>');