Поделиться через


Краткое руководство: клиентская библиотека Apache Gremlin для Azure Cosmos DB на Python.

Начало работы с клиентской библиотекой Apache Gremlin для Azure Cosmos DB для Python для хранения, управления и запроса неструктурированных данных. Выполните действия, описанные в этом руководстве, чтобы создать новую учетную запись, установить клиентская библиотека Python, подключиться к учетной записи, выполнить общие операции и запросить окончательные образцы данных.

Исходный код библиотеки | Пакет (PyPi)

Необходимые компоненты

  • Последняя версия Azure CLI в Azure Cloud Shell.

    • Если вы предпочитаете локально запускать справочные команды CLI, войдите в Azure CLI с помощью az login команды.
  • Python 3.12 или более поздней версии

Установка

Сначала настройте учетную запись и среду разработки для этого руководства. В этом разделе описан процесс создания учетной записи, получения учетных данных и подготовки среды разработки.

Создать аккаунт

Сначала создайте API для учетной записи Apache Gremlin. После создания учетной записи создайте ресурсы базы данных и графа.

  1. Если у вас еще нет целевой группы ресурсов, используйте az group create команду для создания новой группы ресурсов в подписке.

    az group create \
        --name "<resource-group-name>" \
        --location "<location>"
    
  2. az cosmosdb create Используйте команду, чтобы создать новую учетную запись Azure Cosmos DB для Apache Gremlin с параметрами по умолчанию.

    az cosmosdb create \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --locations "regionName=<location>" \
        --capabilities "EnableGremlin"
    
  3. Создайте новую базу данных с именем az cosmosdb gremlin database createcosmicworks.

    az cosmosdb gremlin database create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --name "cosmicworks"
    
  4. az cosmosdb gremlin graph create Используйте команду для создания нового графа с именемproducts.

    az cosmosdb gremlin graph create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --database-name "cosmicworks" \
        --name "products" \
        --partition-key-path "/category"
    

Получение учетных данных

Теперь получите пароль для клиентской библиотеки для создания подключения к недавно созданной учетной записи.

  1. Используйте az cosmosdb show для получения хоста для учетной записи.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{host:name}"
    
  2. Запишите значение host свойства из выходных данных предыдущих команд. Значение этого свойства — это хост, который вы используете далее в этом руководстве для подключения к учетной записи и библиотеке.

  3. Используйте az cosmosdb keys list для получения ключей для учетной записи.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. Запишите значение primaryMasterKey свойства из выходных данных предыдущих команд. Это значение свойства — это ключ , который вы используете далее в этом руководстве для подключения к учетной записи с библиотекой.

Подготовка среды разработки

Затем настройте среду разработки с новым проектом и клиентской библиотекой. Этот шаг является последним обязательным предварительным условием, прежде чем перейти к остальной части этого руководства.

  1. Запустите пустую папку.

  2. gremlinpython Импортируйте пакет из индекса пакетов Python (PyPI).

    pip install gremlinpython
    
  3. Создайте файл app.py.

Объектная модель

Описание
GremlinClient Представляет клиент, используемый для подключения и взаимодействия с сервером Gremlin
GraphTraversalSource Используется для создания и выполнения обходов Gremlin

Примеры кода

Проверка подлинности клиента

Начните с проверки подлинности клиента с помощью учетных данных, собранных ранее в этом руководстве.

  1. Откройте файл app.py в интегрированной среде разработки (IDE).

  2. Импортируйте следующие типы из библиотеки gremlin_python.driver :

    • gremlin_python.driver.client
    • gremlin_python.driver.serializer
    from gremlin_python.driver import client, serializer
    
  3. Создайте строковые переменные для учетных данных, собранных ранее в этом руководстве. Назовите переменные hostname и primary_key.

    hostname = "<host>"
    primary_key = "<key>"
    
  4. Client Создайте объект с помощью учетных данных и переменных конфигурации, созданных на предыдущих шагах. Присвойте переменной clientимя.

    client = client.Client(
        url=f"wss://{hostname}.gremlin.cosmos.azure.com:443/",
        traversal_source="g",
        username="/dbs/cosmicworks/colls/products",
        password=f"{primary_key}",
        message_serializer=serializer.GraphSONSerializersV2d0()
    )
    

Вставка данных

Затем вставьте новые вершины и пограничные данные в граф. Перед созданием новых данных снимите график всех существующих данных.

  1. g.V().drop() Выполните запрос, чтобы очистить все вершины и края из графа.

    client.submit("g.V().drop()").all().result()
    
  2. Создайте запрос Gremlin, который добавляет вершину.

    insert_vertex_query = (
        "g.addV('product')"
        ".property('id', prop_id)"
        ".property('name', prop_name)"
        ".property('category', prop_category)"
        ".property('quantity', prop_quantity)"
        ".property('price', prop_price)"
        ".property('clearance', prop_clearance)"
    )
    
  3. Добавьте вершину для одного продукта.

    client.submit(
        message=insert_vertex_query,
        bindings={
            "prop_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
            "prop_name": "Yamba Surfboard",
            "prop_category": "gear-surf-surfboards",
            "prop_quantity": 12,
            "prop_price": 850.00,
            "prop_clearance": False,
        },
    ).all().result()
    
  4. Добавьте еще две вершины для дополнительных двух продуктов.

    client.submit(
        message=insert_vertex_query,
        bindings={
            "prop_id": "bbbbbbbb-1111-2222-3333-cccccccccccc",
            "prop_name": "Montau Turtle Surfboard",
            "prop_category": "gear-surf-surfboards",
            "prop_quantity": 5,
            "prop_price": 600.00,
            "prop_clearance": True,
        },
    ).all().result()
    
    client.submit(
        message=insert_vertex_query,
        bindings={
            "prop_id": "cccccccc-2222-3333-4444-dddddddddddd",
            "prop_name": "Noosa Surfboard",
            "prop_category": "gear-surf-surfboards",
            "prop_quantity": 31,
            "prop_price": 1100.00,
            "prop_clearance": False,
        },
    ).all().result()
    
  5. Создайте ещё один запрос Gremlin, который добавляет ребро.

    insert_edge_query = (
        "g.V([prop_partition_key, prop_source_id])"
        ".addE('replaces')"
        ".to(g.V([prop_partition_key, prop_target_id]))"
    )
    
  6. Добавьте два края.

    client.submit(
        message=insert_edge_query,
        bindings={
            "prop_partition_key": "gear-surf-surfboards",
            "prop_source_id": "bbbbbbbb-1111-2222-3333-cccccccccccc",
            "prop_target_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        },
    ).all().result()
    
    client.submit(
        message=insert_edge_query,
        bindings={
            "prop_partition_key": "gear-surf-surfboards",
            "prop_source_id": "bbbbbbbb-1111-2222-3333-cccccccccccc",
            "prop_target_id": "cccccccc-2222-3333-4444-dddddddddddd",
        },
    ).all().result()
    

Чтение данных

Затем считывайте данные, которые ранее были вставлены в граф.

  1. Создайте запрос, который считывает вершину с помощью уникального идентификатора и значения ключа раздела.

    read_vertex_query = "g.V([prop_partition_key, prop_id])"
    
  2. Затем считывайте вершину, указав необходимые параметры.

    matched_item = client.submit(
        message=read_vertex_query,
        bindings={
            "prop_partition_key": "gear-surf-surfboards",
            "prop_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
        }
    ).one()
    

Запрос данных

Наконец, используйте запрос, чтобы найти все данные, соответствующие определенному обходу или фильтру в графе.

  1. Создайте запрос, который находит все вершины, исходящие из определенной вершины.

    find_vertices_query = (
        "g.V().hasLabel('product')"
        ".has('category', prop_partition_key)"
        ".has('name', prop_name)"
        ".outE('replaces').inV()"
    )
    
  2. Выполните запрос, указывающий Montau Turtle Surfboard продукт.

    find_results = client.submit(
        message=find_vertices_query,
        bindings={
            "prop_partition_key": "gear-surf-surfboards",
            "prop_name": "Montau Turtle Surfboard",
        },
    ).all().result()
    
  3. Итерируйте результаты запроса.

    for result in find_results:
        # Do something here with each result
    

Выполнение кода

Запустите созданное приложение с помощью терминала в каталоге приложения.

python app.py

Очистка ресурсов

Если учетная запись больше не нужна, удалите учетную запись из подписки Azure, удалив ресурс.

az cosmosdb delete \
    --resource-group "<resource-group-name>" \
    --name "<account-name>"

Следующий шаг