استيعاب البيانات الوصفية للمخطط (Ingesting Schema Metadata)
Ingesting Schema Metadata
شرح لآلية استيعاب البيانات الوصفية (Schema Metadata) في Validatar، فوائدها، تطبيقاتها العملية، وكيفية تكوينها وكتابة سكربتات الاستيعاب.
نظرة عامة
يتيح استيعاب البيانات الوصفية (metadata ingestion) في Validatar الاستيراد التلقائي للبيانات الوصفية من مصدر بيانات. من خلال الاستفادة من قدرات استيعاب البيانات الوصفية، يمكن للمستخدمين الاستفادة من إنشاء الاختبارات تلقائياً، وتحليل البيانات (data profiling)، ونظرة عامة في الوقت الفعلي على مجموعة بياناتهم بما في ذلك تغيراتها عبر الزمن. تدعم هذه الميزة مصادر البيانات المبنية على قواعد البيانات ومصادر البيانات المبنية على السكربتات على حد سواء، مما يوفر مرونة في التعامل مع البيانات. علاوة على ذلك، يمكن تشغيل عملية الاستيعاب يدوياً أو ضبطها على جدول زمني متكرر، مما يضمن بقاء بياناتك الوصفية محدّثة وبقاء اختباراتك دقيقة وشاملة.
أهمية استيعاب البيانات الوصفية للمخطط
يوفر استيعاب البيانات الوصفية في Validatar عدة فوائد جوهرية:
- بناء الاختبارات تلقائياً (Automated Test Building): يمكن استخدام معلومات البيانات الوصفية لبناء اختبارات لبياناتك تلقائياً، مما يجعل عملية الاختبار أكثر كفاءة.
- تحليل البيانات (Data Profiling): يتيح استيعاب البيانات الوصفية للمستخدمين إجراء تحليل شامل للبيانات (profiling).
- مراقبة البيانات (Data Monitoring): يوفر نظرة عامة على الحالة الحالية لبياناتك ويتتبع التغييرات عبر الزمن، مما يضمن اطلاعك المستمر على حالة بياناتك.
التطبيقات العملية
يُعد استيعاب البيانات الوصفية في Validatar ميزة قوية ذات نطاق واسع من التطبيقات العملية:
- 1اختبار البيانات (Data Testing): يساعد بناء الاختبارات تلقائياً باستخدام البيانات الوصفية في ضمان وتقييم جودة البيانات. فإنشاء الاختبارات تلقائياً استناداً إلى البيانات الوصفية المعرّفة يضمن التحقق الفوري من أي تغييرات في خط أنابيب البيانات، مما يقلل من مخاطر ظهور الأخطاء.
- 2تحليل المخطط (Schema Profiling): يساعد استخدام Validatar لاحتياجات تحليل البيانات فرق البيانات على الإبلاغ عن توزيعات البيانات وأنماطها وحالاتها الشاذة، مما يوفر رؤى حول جودة البيانات ويساعد في اتخاذ قرارات مستنيرة بشأن متطلبات تنقية البيانات أو تحويلها.
- 3مراقبة البيانات (Data Monitoring): يساعد استيعاب البيانات الوصفية فرق البيانات على مراقبة التغيرات في المقاييس الأساسية من خلال وضع قواعد وحدود استناداً إلى البيانات الوصفية. يمكن لـ Validatar بعد ذلك اكتشاف أي انحرافات وإخطار الفريق بها تلقائياً، مما يتيح التدخل الاستباقي.
- 4حوكمة البيانات والامتثال (Data Governance & Compliance): يمكن لـ Validatar المساعدة في فرض حوكمة البيانات من خلال التحقق من أن البيانات تتوافق مع المعايير والسياسات المحددة مسبقاً والموضحة في البيانات الوصفية. يضمن ذلك التعامل مع البيانات باستمرار وتلبية متطلبات الامتثال.
- 5تحليل نَسَب البيانات (Data Lineage Analysis): يمكن لـ Validatar، باستخدام البيانات الوصفية، المساعدة في تصور نَسَب البيانات. يساعد ذلك في فهم تدفق البيانات من المصدر إلى الوجهة، وهو أمر قيّم لتحديد التبعيات، وفهم تأثير التغييرات، واستكشاف المشكلات في خطوط أنابيب البيانات المعقدة وإصلاحها.
كيفية تكوين استيعاب البيانات الوصفية
قبل تكوين استيعاب البيانات الوصفية للمخطط، تأكد من أن مصدر البيانات (Data Source) الذي تقوم بإعداد البيانات الوصفية للمخطط له قد تم إنشاؤه بالفعل.
- 1تحديد مصدر البيانات: انتقل إلى Settings > Data Sources > اختر مصدر البيانات الخاص بك. ضمن Data Source Settings، اختر Schema Metadata.
- 2تكوين الاتصال: اتصال البيانات الوصفية الافتراضي هو نفس الاتصال المستخدم لسحب بيانات نتائج الاختبار. احتفظ بهذا الإعداد الافتراضي أو أضف اتصالاً ثانوياً بإلغاء تحديد 'Same as Primary' والنقر على 'Add'. تشبه هذه العملية عملية إنشاء اتصال لمصدر بيانات جديد.
- 3اختيار البيانات الوصفية باستخدام SQL: قم بتخصيص سكربتات SQL لكل نوع كائن. بينما تُقدَّم سكربتات SQL افتراضياً لكل من SQL Server وSnowflake، يمكنك تجاوزها وتخصيصها. أما بالنسبة للسكربتات المبنية على Python، فمطلوب سكربت واحد مدمج فقط يحتوي على كل متغير DataFrame. راجع الجدول في القسم أدناه لمعرفة الأعمدة المطلوبة لكل نوع كائن/DataFrame. قم بمعاينة وإنهاء التكوين لكل كائن بمراجعة السكربتات، ثم انقر على 'Update Ingestion SQL' للحفظ.
- 4استيعاب البيانات الوصفية: بعد تكوين SQL، انقر على 'Refresh Now' لاستخراج البيانات الوصفية من مصدر بياناتك وتحميلها في Validatar.
- 5عرض النتائج: لعرض البيانات الوصفية المستوعبة، انقر على التاريخ والوقت ضمن Ingestion History. تعرض النافذة المنبثقة سكربت SQL الخاص بالبيانات الوصفية للمخطط وقت التشغيل، إلى جانب قائمة الـ schemas والجداول والأعمدة المُدرَجة. تنقّل بين المستويات المحددة بالنقر على تبويبات الكائنات.
- 6مراقبة التغييرات: تعرض عمليات التشغيل اللاحقة لاستيعاب البيانات الوصفية للمخطط قوائم بالكائنات المُدرَجة والمُحدَّثة والمحذوفة منذ آخر عملية استيعاب. استخدم هذه المعلومات لمراقبة التغييرات في بياناتك الوصفية.
كتابة سكربتات استيعاب البيانات الوصفية
يعرض الجدول التالي الأعمدة الضرورية لسكربتات استيعاب البيانات الوصفية. حقول Custom Metadata مدعومة في سكربت الاستيعاب وهي اختيارية. ولتبسيط العملية، تُعرض جميع الأعمدة بشكل مناسب ويمكنك سحب وإفلات كل عمود في نافذة استعلام Validatar.
| Object Type / DataFrame | Required Columns | Optional Columns |
|---|---|---|
| Schema | Name* | — |
| Table | Schema*, Name* | Type, ViewDefinition |
| Column | Schema*, Table*, Name*, DataType, Sequence | IsNullable, IsIdentity, IsPrimaryKey, StringMaxLength, NumericPrecision, NumericScale, DateTimePrecision, Comment |
* = يجب أن يكون العمود فريداً (unique).
فيما يلي أمثلة من Snowflake توضح كيفية كتابة سكربتات استيعاب البيانات الوصفية للمخطط لكل كائن من كائنات قاعدة البيانات.
مستوى الـ Schema
select schema_name as "Name",
/* The following line is a Custom Metadata Field example */
last_altered as "LastAltered"
from information_schema.schemata
where schema_name <> 'INFORMATION_SCHEMA';مستوى الجدول
select
t.table_schema as "Schema",
t.table_name as "Name",
case when t.Table_Type = 'VIEW' then 'V' else 'T' end as "Type",
v.View_Definition as "ViewDefinition"
from information_schema.tables t
left join information_schema.views v on t.table_catalog =
v.table_catalog and t.table_schema = v.table_schema and
t.table_name = v.table_name
where t.table_schema <> 'INFORMATION_SCHEMA';مستوى العمود
select c.TABLE_SCHEMA as "Schema",
c.TABLE_NAME as "Table",
c.COLUMN_NAME as "Name",
c.DATA_TYPE as "DataType",
c.ORDINAL_POSITION as "Sequence",
case when c.IS_NULLABLE = 'YES' then 1 else 0 end as "IsNullable",
case when c.IS_IDENTITY = 'YES' then 1 else 0 end as "IsIdentity",
0 as "IsPrimaryKey",
c.CHARACTER_MAXIMUM_LENGTH as "StringMaxLength",
c.NUMERIC_PRECISION as "NumericPrecision",
c.NUMERIC_SCALE as "NumericScale",
c.DATETIME_PRECISION as "DateTimePrecision",
c.COMMENT as "Comment"
from information_schema.COLUMNS c
where c.table_schema <> 'INFORMATION_SCHEMA';سكربت Python المدمج
فيما يلي مثال على سكربت Python المدمج لاستيعاب البيانات الوصفية، والمستخدم لمصدر بيانات من نوع Windows Directory - Delimited Files.
### SETUP DATAFRAMES ###
schema_dataframe = pd.DataFrame(columns=['Name','contains_files','schema_object_represents'])
table_dataframe = pd.DataFrame(columns=['Schema','Name','Type','file_type','date_modified','file_size','file_extension','column_delimiter','file_logical_table'])
column_dataframe = pd.DataFrame(columns=['Schema','Table','Name','DataType','Sequence'])
### HELPER FOR FORMATTING SIZE AS HUMAN READABLE
def sizeof_fmt(num, suffix="B"):
for unit in ["", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"]:
if abs(num) < 1024.0:
return f"{num:3.1f}{unit}{suffix}"
num /= 1024.0
return f"{num:.1f}Yi{suffix}"
### SCHEMA TABLE COLUMN INGESTION SCRIPT ###
folders = [parent_folder_path]
if include_sub_folders:
for root, dirs, files in os.walk(parent_folder_path):
for name in dirs:
folders.append(os.path.join(root, name))
### GET ALL SCHEMAS AND TABLES ###
for folder in folders:
schema_name = folder.replace(parent_folder_path,'.')
schema_dataframe_new = pd.concat([schema_dataframe, pd.DataFrame({'Name':[schema_name],'contains_files':['Yes'],'schema_object_represents':['Folder']})], ignore_index = True)
schema_dataframe_new.reset_index()
schema_dataframe = schema_dataframe_new
file_names = [f for f in os.listdir(folder) if os.path.isfile(os.path.join(folder, f))]
schema_names = [schema_name for f in file_names]
table_type ='Table'
file_type ='Delimited'
file_types = [file_type for f in file_names]
file_sizes = [sizeof_fmt(os.path.getsize(folder + '/' + f)) for f in file_names]
date_modifieds = [datetime.fromtimestamp(os.path.getmtime(folder + '/' + f)).strftime('%Y-%m-%d %H:%M:%S') for f in file_names]
file_extensions = [acceptable_file_extensions for f in file_names]
column_delimiters = [delimiter for f in file_names]
file_logical_tables = [f.split('-')[0].split('.')[0] for f in file_names]
table_type_names = [table_type for f in file_names]
table_dataframe_new = pd.concat([table_dataframe, pd.DataFrame({'Schema':schema_names,'Name':file_names,'Type':table_type_names,'file_type':file_types,'date_modified':date_modifieds,'file_size':file_sizes,'file_extension':file_extensions,'column_delimiter':column_delimiters,'file_logical_table':file_logical_tables})], ignore_index = True)
table_dataframe_new.reset_index()
table_dataframe = table_dataframe_new
### ELIMINATE UNACCEPTABLE FILES FROM TABLES
starting_table_dataframe = pd.DataFrame(columns=['Schema','Name','Type','file_type','date_modified','file_size','file_extension','column_delimiter','file_logical_table'])
for extension in acceptable_file_extensions.split(','):
starting_table_dataframe = pd.concat([starting_table_dataframe,table_dataframe[table_dataframe.Name.str.endswith(extension)]])
table_dataframe = starting_table_dataframe
table_dataframe.reset_index()
###
### LOOP THROUGH ALL FILES AND GET COLUMN INFO
for index, row in table_dataframe.iterrows():
try:
fullpath = parent_folder_path + row['Schema'][1:] + '\\' + row['Name']
if first_row_contains_column_names:
x = pd.read_csv(fullpath, low_memory=False, delimiter=delimiter, header=0, nrows=number_of_records_to_preview)
else:
x = pd.read_csv(fullpath, low_memory=False, delimiter=delimiter, header=None, nrows=number_of_records_to_preview)
column_dataframe_new = pd.concat([column_dataframe, pd.DataFrame({'Schema':row['Schema'],'Table':row['Name'],'Name':x.columns,'DataType':x.dtypes,'Sequence':numpy.arange(len(x.columns))+1})], ignore_index = True)
column_dataframe_new.reset_index()
column_dataframe = column_dataframe_new
except Exception as ex:
print(ex)أتمتة استيعاب البيانات الوصفية
يمكن تكوين استيعاب البيانات الوصفية للعمل وفق جدول زمني متكرر. لإعداد ذلك:
- 1Ingestion Settings: انتقل إلى إعدادات Schema Metadata لمصدر البيانات الخاص بك.
- 2Scheduling: اختر 'Set Refresh Schedule'.
- 3Defining Schedule: حدد تكرار وتوقيت عملية الاستيعاب المتكررة.
- 4Save Settings: احفظ إعداداتك لبدء عملية الاستيعاب الآلية. تأكد من تفعيل الجدول الزمني قبل الحفظ.
الخلاصة
يُعد استيعاب البيانات الوصفية ميزة محورية في Validatar توفر فوائد في بناء الاختبارات تلقائياً، وتحليل البيانات، ومراقبتها. تنطبق هذه الميزة على مصادر البيانات المبنية على قواعد البيانات والمبنية على السكربتات على حد سواء، ويمكن تشغيلها يدوياً أو وفق جدول زمني متكرر. من خلال الاستفادة من قوة استيعاب البيانات الوصفية، يمكن للمستخدمين تحقيق إدارة واختبار أكثر كفاءة وشمولاً للبيانات.