برنامه نویسی

وارد کردن داده های جدول به یک پایگاه داده نمودار با 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;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ممگراف-جدول-به-گراف-وارد کردن

تصویر 1. تجسم آزمایشگاه ممگراف از ساختار گراف

بعدش چی؟

اکنون زمان آن رسیده است که داده های خود را به Memgraph وارد کنید و شروع به استفاده از آن کنید!

همیشه می‌توانید Memgraph Playground را برای نمونه‌ها و موارد کاربردی جالب بررسی کنید.
اگر سوالی دارید یا می خواهید کار خود را با سایر اعضای انجمن به اشتراک بگذارید، به ما بپیوندید سرور Discord.

اطلاعات بیشتر در مورد پایتون و پایگاه های داده گراف را در memgraph.com بخوانید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا