وارد کردن داده های جدول به یک پایگاه داده نمودار با GQLAlchemy

آیا در نظر دارید که از داده های جدول به یک پایگاه داده گراف منتقل شوید، اما به نظر می رسد یک مهاجرت پیچیده باشد؟ با این آموزش کوتاه، ما به شما نشان می دهیم که چگونه با استفاده از GQLAlchemy این کار را انجام دهید. شما یاد خواهید گرفت که چگونه داده های جدول را از فایل های ذخیره شده در حافظه محلی یا آنلاین به پایگاه داده نمودار Memgraph وارد کنید. می توانید نوت بوک اصلی Jupyter را در مخزن منبع باز GitHub ما بیابید.
اگر در هر نقطه با مشکلی در این آموزش یا چیزی مواجه شدید
برای شما مشخص نیست، با سرور Discord ما تماس بگیرید.
1. پیش نیازها
برای این آموزش باید نصب کنید:
-
Jupyter: اگر می خواهید این آموزش را به عنوان یک نوت بوک اجرا کنید به Jupyter نیاز است.
-
Docker: از داکر استفاده می شود زیرا Memgraph یک برنامه بومی لینوکس است و نمی توان آن را روی ویندوز و macOS نصب کرد.
-
GQLAlchemy: یک OGM پایتون (نقشهنگار گراف شی) که به Memgraph متصل میشود
2. نصب با استفاده از Docker
پس از نصب Docker، می توانید Memgraph را با اجرای:
docker run -it -p 7687:7687 -p 7444:7444 -p 3000:3000 memgraph/memgraph-platform:2.2.6
این دستور دانلود را شروع کرده و پس از اتمام آن، کانتینر Memgraph را اجرا کنید.
3. اتصال به Memgraph با GQLAlchemy
ما استفاده خواهیم کرد GQLAlchemy نگاشت گراف شی (OGM) برای اتصال به Memgraph و اجرا سایفر به راحتی پرس و جو می کند GQLAlchemy همچنین به عنوان درایور/کلاینت پایتون برای Memgraph عمل میکند. شما می توانید آن را با استفاده از:
pip install gqlalchemy
اشاره: ممکن است لازم باشد CMake را قبل از نصب GQLAlchemy نصب کنید.
شاید وقتی به Cypher اشاره کردم گیج شدید. می توانید Cypher را به عنوان SQL برای پایگاه داده های گراف در نظر بگیرید. این شامل بسیاری از ساختارهای زبانی مشابه است CREATE
، UPDATE
، DELETE
… و برای پرس و جو از پایگاه داده استفاده می شود.
from gqlalchemy import Memgraph
memgraph = Memgraph("127.0.0.1", 7687)
بیایید قبل از شروع هر کار دیگری مطمئن شویم که Memgraph خالی است.
memgraph.drop_database()
results = memgraph.execute_and_fetch(
"""
MATCH (n) RETURN count(n) AS number_of_nodes ;
"""
)
print(next(results))
4. ساخت فایل داده جدول ساختگی
برای این آموزش، ما قصد داریم فایلهای CSV را برای نمایش دادههای خود ایجاد کنیم. با استفاده از دو فایل می توانید رابطه بین آنها را با کلید خارجی نیز مدل کنید. اما بیشتر در مورد آن بعداً، در حال حاضر، می توانید کد زیر را برای ایجاد دو فایل CSV، individual.csv و address.csv اجرا کنید.
import csv
header = ["ind_id", "name", "surname", "add_id"]
data = [
[1, "Tomislav", "Petrov", 1],
[2, "Ivan", "Horvat", 3],
[3, "Marko", "Horvat", 3],
[4, "John", "Doe", 2],
[5, "John", "Though", 4],
]
with open("individual.csv", "w", encoding="UTF8", newline="") as f:
writer = csv.writer(f)
writer.writerow(header)
writer.writerows(data)
header = ["add_id", "street", "street_num", "city"]
data = [
[1, "Ilica", 2, "Zagreb"],
[2, "Death Valley", 0, "Knowhere"],
[3, "Horvacanska", 3, "Horvati"],
[4, "Broadway", 12, "New York"],
]
with open("address.csv", "w", encoding="UTF8", newline="") as f:
writer = csv.writer(f)
writer.writerow(header)
writer.writerows(data)
5. تعریف ترجمه
برای اینکه داده های جدول را به شکل نمودار ترجمه کنید، باید دستورالعمل هایی را در مورد نحوه انجام این کار به واردکننده بدهید. برای این کار باید a را تعریف کنید شی پیکربندی داده که می تواند یک دیکشنری در کد پایتون یا یک فایل YAML باشد.
در اینجا یک ساختار کلی از یک فایل پیکربندی داده YAML آمده است:
indices: # indices to be created for each table
individuals: # name of the table containing individuals with ind_id
- ind_id
address:
- add_id
name_mappings: # how we want to name node labels
individuals:
label: INDIVIDUAL # nodes made from the individuals table will have the label INDIVIDUAL
address:
label: ADDRESS
column_names_mapping: {"current_column_name": "mapped_name"} # (optional) map column names
one_to_many_relations:
address: [] # currently needed, leave [] if no relations to define
individuals:
- foreign_key: # foreign key used for mapping;
column_name: add_id # specifies its column
reference_table: address # name of table from which the foreign key is taken
reference_key: add_id # column name in reference table from which the foreign key is taken
label: LIVES_IN # label applied to relationship created
from_entity: False # (optional) define direction of relationship created
many_to_many_relations: # intended to be used in case of associative tables
example:
foreign_key_from: # describes the source of the relationship
column_name:
reference_table:
reference_key:
foreign_key_to: # describes the destination of the relationship
column_name:
reference_table:
reference_key:
label:
برای مثال ما از یک فرهنگ لغت برای ساده کردن فرآیند ورودی استفاده می کنیم. ما می خواهیم برای تمام ردیف ها در هر دو جدول و یک رابطه گره ایجاد کنیم LIVES_IN
بین یک INDIVIDUAL
و ADDRESS
گره ها همچنین، شما از آن استفاده نخواهید کرد many_to_many_relations
فیلد، بنابراین شی پیکربندی داده شما این است:
data_conf = {
"indices": {"address": ["add_id"], "individual": ["ind_id"]},
"name_mappings": {
"individual": {"label": "INDIVIDUAL"},
"address": {"label": "ADDRESS"},
},
"one_to_many_relations": {
"address": [],
"individual": [
{
"foreign_key": {
"column_name": "add_id",
"reference_table": "address",
"reference_key": "add_id",
},
"label": "LIVES_IN",
}
],
},
}
6. وارد کردن از سیستم فایل محلی
در نهایت، برای وارد کردن داده ها به Memgraph، تنها کاری که باید انجام دهید این است که یک نمونه از آن ایجاد کنید LocalFileSystemImporter
و آن را صدا بزنید translate()
روش.
from gqlalchemy.loaders import CSVLocalFileSystemImporter
importer = CSVLocalFileSystemImporter(
data_configuration=data_conf,
path="./",
)
importer.translate(drop_database_on_start=True)
7. واردات از ذخیره سازی فایل آنلاین
علاوه بر این، ما برای خواندن داده ها از ارائه دهندگان ذخیره سازی آنلاین پشتیبانی ارائه می دهیم آمازون S3 و لکه لاجوردی از طريق AmazonS3Importer
و AzureBlobImporter
. به عنوان مثال، برای استفاده از حافظه Azure، به سادگی از قطعه زیر استفاده کنید:
importer = CSVAzureBlobFileSystemImporter(
container_name="<your_container_name>",
data_configuration=data_conf,
account_name="<your_account_name>",
account_key="<your_account_key>",
)
برای هر ارائهدهنده خدمات دیگری، امکان پیادهسازی کلاس واردکننده سفارشی شما وجود دارد، در اینجا نحوه اجرای آن آمده است. فراموش نکنید که GQLAlchemy یک پروژه منبع باز است، بنابراین می توانید عملکرد توسعه یافته خود را در مخزن GitHub ما ارسال کنید.
8. پرس و جو از پایگاه داده و بازیابی نتایج
بیایید با بازیابی اطلاعات ما مطمئن شویم که به درستی وارد شده است:
results = memgraph.execute_and_fetch(
"""
MATCH (n) RETURN n;
"""
)
results = list(results)
for result in results:
print(result["n"])
اگر میخواهید با دادههای نمودار خود کارهای بیشتری انجام دهید، از کتابخانه نمودار Memgraph MAGE دیدن کنید (و یک ستاره برای ما پرتاب کنید ⭐) و نگاهی به همه الگوریتمهای نموداری که پیادهسازی شدهاند بیندازید. شما همچنین می توانید الگوریتم ها و روش های کاربردی خود را پیاده سازی و ارسال کنید.
10. تجسم نمودار در آزمایشگاه ممگراف
Memgraph Lab را در مرورگر خود در آدرس localhost:3000 باز کنید.
کوئری Cypher زیر را اجرا کنید:
MATCH (n)-[r]-()
RETURN n, r;
بعدش چی؟
اکنون زمان آن رسیده است که داده های خود را به Memgraph وارد کنید و شروع به استفاده از آن کنید!
همیشه میتوانید Memgraph Playground را برای نمونهها و موارد کاربردی جالب بررسی کنید.
اگر سوالی دارید یا می خواهید کار خود را با سایر اعضای انجمن به اشتراک بگذارید، به ما بپیوندید سرور Discord.