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.
Önemli
PostgreSQL için Azure Cosmos DB artık yeni projeler için desteklenmemektedir. Bu hizmeti yeni projeler için kullanmayın. Bunun yerine, şu iki hizmetlerden birini kullanın:
99,999% kullanılabilirlik hizmet düzeyi sözleşmesi (SLA), anında otomatik ölçeklendirme ve birden çok bölgede otomatik yük devretme ile yüksek ölçekli senaryolar için tasarlanmış dağıtılmış bir veritabanı çözümü için NoSQL için Azure Cosmos DB kullanın.
Açık kaynak Citus uzantısını kullanarak bölümlenmiş Azure Veritabanı'nın PostgreSQL için Elastik Kümeler özelliğini kullanın.
Bu makalede, postgreSQL için Azure Cosmos DB'nize doğrudan Azure Blob Depolama (ABS) verileri işlemek ve yüklemek için pg_azure_storage PostgreSQL uzantısının nasıl kullanılacağı gösterilmektedir. ABS, bulutta yerel olarak ölçeklenebilir, dayanıklı ve güvenli bir depolama hizmetidir. Bu özellikler, mevcut verileri depolamak ve buluta taşımak için iyi bir seçimdir.
Veritabanını ve blob depolamayı hazırlayın
Azure Blob Depolama'dan veri yüklemek için PostgreSQL uzantısını pg_azure_storage veritabanınıza yükleyin:
SELECT * FROM create_extension('azure_storage');
Önemli
pg_azure_storage uzantısı yalnızca PostgreSQL 13 ve üzerini çalıştıran PostgreSQL kümeleri için Azure Cosmos DB'de kullanılabilir.
Bu makale için bir genel gösterim veri kümesi hazırladık. Kendi veri kümenizi kullanmak için, veri setlerinizi Azure Blob Depolama'ya verimli bir şekilde aktarmanın nasıl olduğunu öğrenmek amacıyla şirket içi verilerinizi bulut depolamaya taşıma adımını takip edin.
Not
"Kapsayıcı (kapsayıcılar ve bloblar için anonim okuma erişimi)" seçeneğini belirlediğinizde, Azure Blob Depolama genel URL'lerini kullanarak dosyaları almanıza ve pg_azure_storage'da bir hesap anahtarı yapılandırmanıza gerek kalmadan kapsayıcı içeriğini numaralandırabilirsiniz. "Özel (anonim erişim yok)" veya "Blob (yalnızca bloblar için anonim okuma erişimi)" erişim düzeyine ayarlanmış kapsayıcılar bir erişim anahtarı gerektirir.
Kapsayıcı içeriğini listeleme
Bu nasıl yapılır için önceden oluşturulmuş bir tanıtım Azure Blob Depolama hesabı ve kapsayıcısı vardır. Kapsayıcının adı ve githubhesapta yer alır pgquickstart . işlevini kullanarak azure_storage.blob_list(account, container) kapsayıcıda hangi dosyaların mevcut olduğunu kolayca görebiliriz.
SELECT path, bytes, pg_size_pretty(bytes), content_type
FROM azure_storage.blob_list('pgquickstart','github');
-[ RECORD 1 ]--+-------------------
path | events.csv.gz
bytes | 41691786
pg_size_pretty | 40 MB
content_type | application/x-gzip
-[ RECORD 2 ]--+-------------------
path | users.csv.gz
bytes | 5382831
pg_size_pretty | 5257 kB
content_type | application/x-gzip
Normal bir SQL WHERE yan tümcesi kullanarak veya UDF parametresini prefixblob_list kullanarak çıkışı filtreleyebilirsiniz. İkincisi, Azure Blob Depolama tarafında döndürülen satırları filtreler.
Not
Kapsayıcı içeriğini listelemek için bir hesap ve erişim anahtarı veya anonim erişimin etkinleştirildiği bir kapsayıcı gerekir.
SELECT * FROM azure_storage.blob_list('pgquickstart','github','e');
-[ RECORD 1 ]----+---------------------------------
path | events.csv.gz
bytes | 41691786
last_modified | 2022-10-12 18:49:51+00
etag | 0x8DAAC828B970928
content_type | application/x-gzip
content_encoding |
content_hash | 473b6ad25b7c88ff6e0a628889466aed
SELECT *
FROM azure_storage.blob_list('pgquickstart','github')
WHERE path LIKE 'e%';
-[ RECORD 1 ]----+---------------------------------
path | events.csv.gz
bytes | 41691786
last_modified | 2022-10-12 18:49:51+00
etag | 0x8DAAC828B970928
content_type | application/x-gzip
content_encoding |
content_hash | 473b6ad25b7c88ff6e0a628889466aed
ABS'den veri yükleme
COPY komutuyla veri yükleme
Örnek şema oluşturarak başlayın.
CREATE TABLE github_users
(
user_id bigint,
url text,
login text,
avatar_url text,
gravatar_id text,
display_login text
);
CREATE TABLE github_events
(
event_id bigint,
event_type text,
event_public boolean,
repo_id bigint,
payload jsonb,
repo jsonb,
user_id bigint,
org jsonb,
created_at timestamp
);
CREATE INDEX event_type_index ON github_events (event_type);
CREATE INDEX payload_index ON github_events USING GIN (payload jsonb_path_ops);
SELECT create_distributed_table('github_users', 'user_id');
SELECT create_distributed_table('github_events', 'user_id');
Verileri tablolara yüklemek komutu çağırmak COPY kadar basit hale gelir.
-- download users and store in table
COPY github_users
FROM 'https://pgquickstart.blob.core.windows.net/github/users.csv.gz';
-- download events and store in table
COPY github_events
FROM 'https://pgquickstart.blob.core.windows.net/github/events.csv.gz';
Uzantının, copy komutuna sağlanan URL'lerin Azure Blob Depolama alanından olduğunu algıladığını, belirttiğimiz dosyaların gzip ile sıkıştırılmış olduğunu ve bunun da otomatik olarak işleme alındığını gözlemleyin.
COPY komutu daha fazla parametre ve biçimi destekler. Yukarıdaki örnekte, dosya uzantılarına göre biçim ve sıkıştırma otomatik olarak seçilmiştir. Ancak, biçimi doğrudan normal COPY komutuna benzer şekilde sağlayabilirsiniz.
COPY github_users
FROM 'https://pgquickstart.blob.core.windows.net/github/users.csv.gz'
WITH (FORMAT 'csv');
Uzantı şu anda aşağıdaki dosya biçimlerini destekler:
| format | açıklama |
|---|---|
| csv | PostgreSQL COPY tarafından kullanılan virgülle ayrılmış değerler biçimi |
| tsv | Sekmeyle ayrılmış değerler, varsayılan PostgreSQL COPY biçimi |
| ikili | İkili PostgreSQL COPY biçimi |
| text | Tek bir metin değeri içeren bir dosya (örneğin, büyük JSON veya XML) |
blob_get() ile veri yükleme
Komutu COPY kullanışlıdır, ancak esneklik sınırlıdır. Dahili olarak COPY işlevi kullanır blob_get ve bu işlevi daha karmaşık senaryolarda verileri işlemek için doğrudan kullanabilirsiniz.
SELECT *
FROM azure_storage.blob_get(
'pgquickstart', 'github',
'users.csv.gz', NULL::github_users
)
LIMIT 3;
-[ RECORD 1 ]-+--------------------------------------------
user_id | 21
url | https://api.github.com/users/technoweenie
login | technoweenie
avatar_url | https://avatars.githubusercontent.com/u/21?
gravatar_id |
display_login | technoweenie
-[ RECORD 2 ]-+--------------------------------------------
user_id | 22
url | https://api.github.com/users/macournoyer
login | macournoyer
avatar_url | https://avatars.githubusercontent.com/u/22?
gravatar_id |
display_login | macournoyer
-[ RECORD 3 ]-+--------------------------------------------
user_id | 38
url | https://api.github.com/users/atmos
login | atmos
avatar_url | https://avatars.githubusercontent.com/u/38?
gravatar_id |
display_login | atmos
Not
Yukarıdaki sorguda, LIMIT 3 uygulanmadan önce dosya tamamen alınır.
Bu işlevle, karmaşık sorgularda verileri anında işleyebilir ve veri aktarımlarını INSERT FROM SELECT olarak gerçekleştirebilirsiniz.
INSERT INTO github_users
SELECT user_id, url, UPPER(login), avatar_url, gravatar_id, display_login
FROM azure_storage.blob_get('pgquickstart', 'github', 'users.csv.gz', NULL::github_users)
WHERE gravatar_id IS NOT NULL;
INSERT 0 264308
Yukarıdaki komutta, gravatar_id içeren hesapları filtreledik ve oturum açma bilgilerini anında büyük harfle çevirdik.
blob_get() seçenekleri
Bazı durumlarda, blob_get, decoder ve compression parametrelerini kullanarak options'ün ne yapmaya çalıştığını tam olarak kontrol etmeniz gerekebilir.
Kod çözücü auto (varsayılan) veya aşağıdaki değerlerden herhangi birine ayarlanabilir:
| format | açıklama |
|---|---|
| csv | PostgreSQL COPY tarafından kullanılan virgülle ayrılmış değerler biçimi |
| tsv | Sekmeyle ayrılmış değerler, varsayılan PostgreSQL COPY biçimi |
| ikili | İkili PostgreSQL COPY biçimi |
| text | Tek bir metin değeri içeren bir dosya (örneğin, büyük JSON veya XML) |
compression(varsayılan) auto veya noneolabilir gzip .
Son olarak parametresi options türündedir jsonb. Bunun için değer oluşturmaya yardımcı olan dört yardımcı program işlevi vardır.
Her yardımcı program işlevi, adıyla eşleşen kod çözücü için belirlenir.
| Kod çözücü | options işlevi |
|---|---|
| csv | options_csv_get |
| tsv | options_tsv |
| ikili | options_binary |
| text | options_copy |
İşlev tanımlarına bakarak hangi parametrelerin hangi kod çözücü tarafından desteklendiğine bakabilirsiniz.
options_csv_get - sınırlayıcı, null_string, üst bilgi, alıntı, kaçış, force_not_null, force_null, content_encoding options_tsv - sınırlayıcı, null_string, content_encoding options_copy - sınırlayıcı, null_string, üst bilgi, alıntı, kaçış, force_quote, force_not_null, force_null, content_encoding.
options_binary - içerik_kodlaması
Yukarıdaki bilgileri bilerek ayrıştırma sırasında null gravatar_id ile kayıtları atabiliriz.
INSERT INTO github_users
SELECT user_id, url, UPPER(login), avatar_url, gravatar_id, display_login
FROM azure_storage.blob_get('pgquickstart', 'github', 'users.csv.gz', NULL::github_users,
options := azure_storage.options_csv_get(force_not_null := ARRAY['gravatar_id']));
INSERT 0 264308
Özel depolamaya erişme
Hesap adınızı ve erişim anahtarınızı alma
Erişim anahtarı olmadan Özel veya Blob erişim düzeyleri olarak ayarlanmış kapsayıcıları listelememize izin verilmez.
SELECT * FROM azure_storage.blob_list('mystorageaccount','privdatasets');ERROR: azure_storage: missing account access key HINT: Use SELECT azure_storage.account_add('<account name>', '<access key>')Depolama hesabınızda Erişim anahtarları'nı açın. Depolama hesabı adını kopyalayın ve key1 bölümünden Anahtarı kopyalayın (önce anahtarın yanındaki Göster'i seçmeniz gerekir).
pg_azure_storage'a hesap ekleme
SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');Artık bu depolama için Özel ve Blob erişim düzeyleri olarak ayarlanmış kapsayıcıları listeleyebilirsiniz, ancak yalnızca rolü kendisine verilmiş olan
cituskullanıcı olarakazure_storage_adminlisteleyebilirsiniz. adlısupportyeni bir kullanıcı oluşturursanız, kapsayıcı içeriğine varsayılan olarak erişmesine izin verilmez.SELECT * FROM azure_storage.blob_list('pgabs','dataverse');ERROR: azure_storage: current user support is not allowed to use storage account pgabssupportKullanıcının belirli bir Azure Blob Depolama hesabı kullanmasına izin vermeİzin vermek,
account_user_addçağırmak kadar basittir.SELECT * FROM azure_storage.account_user_add('mystorageaccount', 'support');erişim anahtarları tanımlanmış tüm hesapları gösteren çıktısında
account_listizin verilen kullanıcıları görebiliriz.SELECT * FROM azure_storage.account_list();account_name | allowed_users ------------------+--------------- mystorageaccount | {support} (1 row)Buna karar verirseniz kullanıcının artık erişimi olmaması gerekir. Yalnızca
account_user_removearayın.SELECT * FROM azure_storage.account_user_remove('mystorageaccount', 'support');
Sonraki adımlar
Tebrikler, postgreSQL için Azure Cosmos DB'ye doğrudan Azure Blob Depolama veri yüklemeyi öğrendinsiniz.
- PostgreSQL için Azure Cosmos DB ile gerçek zamanlı pano oluşturmayı öğrenin.
- pg_azure_storage hakkında daha fazla bilgi edinin.
- Postgres COPY desteği hakkında bilgi edinin.