إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
هام
لم يعد Azure Cosmos DB ل PostgreSQL مدعوما للمشاريع الجديدة. لا تستخدم هذه الخدمة لمشاريع جديدة. بدلا من ذلك، استخدم إحدى هاتين الخدمتين:
استخدم Azure Cosmos DB ل NoSQL لحل قاعدة بيانات موزعة مصمم للسيناريوهات عالية النطاق مع اتفاقية مستوى خدمة توفر 99.999% (SLA) والتحجيم التلقائي الفوري وتجاوز الفشل التلقائي عبر مناطق متعددة.
استخدم ميزة المجموعات المرنة في قاعدة بيانات Azure ل PostgreSQL المجزأة باستخدام ملحق Citus مفتوح المصدر.
توضح هذه المقالة كيفية استخدام ملحق postgreSQL pg_azure_storage لمعالجة البيانات وتحميلها في Azure Cosmos DB ل PostgreSQL مباشرة من Azure Blob Storage (ABS). ABS هي خدمة تخزين قابلة للتطوير ودائمة وآمنة في السحابة. تجعل هذه الخصائص خيارا جيدا لتخزين البيانات الموجودة ونقلها إلى السحابة.
إعداد قاعدة البيانات وتخزين الكائنات الثنائية كبيرة الحجم
لتحميل البيانات من Azure Blob Storage، قم بتثبيت pg_azure_storage ملحق PostgreSQL في قاعدة البيانات الخاصة بك:
SELECT * FROM create_extension('azure_storage');
هام
يتوفر ملحق pg_azure_storage فقط على Azure Cosmos DB لمجموعات PostgreSQL التي تشغل PostgreSQL 13 وما فوق.
لقد أعددنا مجموعة بيانات العرض التوضيحي العام لهذه المقالة. لاستخدام مجموعة البيانات الخاصة بك، اتبع ترحيل البيانات المحلية إلى التخزين السحابي لمعرفة كيفية الحصول على مجموعات البيانات بكفاءة إلى Azure Blob Storage.
إشعار
سيسمح لك تحديد "الحاوية (الوصول للقراءة المجهولة للحاويات والكائنات الثنائية كبيرة الحجم)" باستيعاب الملفات من Azure Blob Storage باستخدام عناوين URL العامة الخاصة بها وتعداد محتويات الحاوية دون الحاجة إلى تكوين مفتاح حساب في pg_azure_storage. تتطلب الحاويات التي تم تعيينها على مستوى الوصول "خاص (لا وصول مجهول)" أو "Blob (الوصول للقراءة المجهولة للكائنات الثنائية كبيرة الحجم فقط)" مفتاح وصول.
قائمة محتويات الحاوية
هناك عرض توضيحي لحساب Azure Blob Storage وحاوية تم إنشاؤها مسبقا لهذه الكيفية. اسم الحاوية هو github، وهو في pgquickstart الحساب. يمكننا بسهولة معرفة الملفات الموجودة في الحاوية باستخدام الدالة azure_storage.blob_list(account, container) .
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
يمكنك تصفية الإخراج إما باستخدام عبارة SQL WHERE عادية، أو باستخدام معلمة prefixblob_list UDF. يقوم الأخير بتصفية الصفوف التي تم إرجاعها على جانب Azure Blob Storage.
إشعار
يتطلب سرد محتويات الحاوية حسابا ومفتاح وصول أو حاوية مع تمكين الوصول المجهول.
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
تحميل البيانات باستخدام الأمر COPY
ابدأ بإنشاء مخطط عينة.
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');
يصبح تحميل البيانات في الجداول بسيطا مثل استدعاء COPY الأمر .
-- 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';
لاحظ كيف أدرك الملحق أن عناوين URL المقدمة إلى أمر النسخ هي من Azure Blob Storage، والملفات التي أشرنا إليها تم ضغطها بواسطة gzip وتم أيضا التعامل معها تلقائيا بالنسبة لنا.
COPY يدعم الأمر المزيد من المعلمات والتنسيقات. في المثال أعلاه، تم تحديد التنسيق والضغط تلقائيا استنادا إلى ملحقات الملف. ومع ذلك، يمكنك توفير التنسيق بشكل مشابه مباشرة للأمر العادي COPY .
COPY github_users
FROM 'https://pgquickstart.blob.core.windows.net/github/users.csv.gz'
WITH (FORMAT 'csv');
يدعم الملحق حاليا تنسيقات الملفات التالية:
| format | الوصف |
|---|---|
| csv | تنسيق القيم المفصولة بفواصل المستخدم بواسطة PostgreSQL COPY |
| tsv | قيم مفصولة بعلامات جدولة، تنسيق PostgreSQL COPY الافتراضي |
| binary | تنسيق Binary PostgreSQL COPY |
| النص | ملف يحتوي على قيمة نصية واحدة (على سبيل المثال، JSON كبير أو XML) |
تحميل البيانات باستخدام blob_get()
COPY الأمر مناسب، ولكنه محدود في المرونة. يستخدم COPY داخليا الدالة blob_get ، والتي يمكنك استخدامها مباشرة لمعالجة البيانات في سيناريوهات أكثر تعقيدا.
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
إشعار
في الاستعلام أعلاه، يتم إحضار الملف بالكامل قبل LIMIT 3 تطبيقه.
باستخدام هذه الدالة، يمكنك معالجة البيانات بسرعة في الاستعلامات المعقدة، والقيام بالاستيراد ك INSERT FROM SELECT.
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
في الأمر أعلاه، قمنا بتصفية البيانات إلى الحسابات ذات gravatar_id الحالة الحالية والعليا لتسجيلات الدخول الخاصة بهم بسرعة.
خيارات blob_get()
في بعض الحالات، قد تحتاج إلى التحكم بالضبط في ما blob_get تحاول القيام به باستخدام decoderالمعلمات و compressionoptions .
يمكن تعيين أداة فك التشفير إلى auto (افتراضي) أو أي من القيم التالية:
| format | الوصف |
|---|---|
| csv | تنسيق القيم المفصولة بفواصل المستخدم بواسطة PostgreSQL COPY |
| tsv | قيم مفصولة بعلامات جدولة، تنسيق PostgreSQL COPY الافتراضي |
| binary | تنسيق Binary PostgreSQL COPY |
| النص | ملف يحتوي على قيمة نصية واحدة (على سبيل المثال، JSON كبير أو XML) |
compression يمكن أن يكون إما auto (افتراضي)، none أو gzip.
وأخيرا، المعلمة options من نوع jsonb. هناك أربع دالات مساعدة تساعد في بناء قيم لها.
يتم تعيين كل دالة أداة مساعدة لأداة فك التشفير المطابقة لاسمها.
| فك | دالة الخيارات |
|---|---|
| csv | options_csv_get |
| tsv | options_tsv |
| binary | options_binary |
| النص | options_copy |
من خلال النظر إلى تعريفات الدالة، يمكنك معرفة المعلمات التي يدعمها أداة فك التشفير.
options_csv_get - محدد، null_string، رأس، اقتباس، هروب، force_not_null، force_null، content_encoding options_tsv - محدد، null_string، content_encoding options_copy - محدد، null_string، رأس، اقتباس، إلغاء، force_quote، force_not_null، force_null، content_encoding.
options_binary - content_encoding
معرفة ما سبق، يمكننا تجاهل التسجيلات التي تحتوي على قيمة خالية gravatar_id أثناء التحليل.
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
الوصول إلى التخزين الخاص
الحصول على اسم حسابك ومفتاح الوصول
بدون مفتاح وصول، لن يسمح لنا بإدراج الحاويات التي تم تعيينها إلى مستويات الوصول الخاصة أو Blob.
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>')في حساب التخزين الخاص بك، افتح مفاتيح Access. انسخ اسم حساب التخزين وانسخ قسم Key from key1 (يجب عليك تحديد Show بجوار المفتاح أولا).
إضافة حساب إلى pg_azure_storage
SELECT azure_storage.account_add('mystorageaccount', 'SECRET_ACCESS_KEY');الآن يمكنك سرد الحاويات التي تم تعيينها إلى مستويات الوصول الخاصة وBlob لهذا التخزين ولكن فقط كمستخدم
citus، الذي لديهazure_storage_adminالدور الممنوح له. إذا قمت بإنشاء مستخدم جديد باسمsupport، فلن يسمح له بالوصول إلى محتويات الحاوية بشكل افتراضي.SELECT * FROM azure_storage.blob_list('pgabs','dataverse');ERROR: azure_storage: current user support is not allowed to use storage account pgabssupportالسماح للمستخدم باستخدام حساب Azure Blob Storage محددمنح الإذن بسيط مثل استدعاء
account_user_add.SELECT * FROM azure_storage.account_user_add('mystorageaccount', 'support');يمكننا أن نرى المستخدمين المسموح لهم في إخراج
account_list، والذي يعرض جميع الحسابات مع تحديد مفاتيح الوصول.SELECT * FROM azure_storage.account_list();account_name | allowed_users ------------------+--------------- mystorageaccount | {support} (1 row)إذا قررت من أي وقت مضى، أن المستخدم يجب أن لا يكون لديه حق الوصول بعد الآن. ما عليك سوى استدعاء
account_user_remove.SELECT * FROM azure_storage.account_user_remove('mystorageaccount', 'support');
الخطوات التالية
تهانينا، لقد تعلمت للتو كيفية تحميل البيانات إلى Azure Cosmos DB ل PostgreSQL مباشرة من Azure Blob Storage.
- تعرف على كيفية إنشاء لوحة معلومات في الوقت الحقيقي باستخدام Azure Cosmos DB ل PostgreSQL.
- تعرف على المزيد حول pg_azure_storage.
- تعرف على دعم Postgres COPY.