Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
  • Оглавление
  • Начало работы
    • Обзор
    • Создание базы данных
    • Аутентификация
    • Интерфейс командной строки YDB CLI
    • Язык запросов YQL
    • YDB SDK
    • Самостоятельное развертывание
      • Обзор
      • Docker
      • Бинарный файл
      • Minikube
    • Полезные ссылки
    • Document API, совместимый с Amazon DynamoDB
      • Настройка инструментов AWS
      • Работа с данными через HTTP-интерфейс
      • Работа с AWS CLI
        • Обзор
        • Создание таблицы
        • Добавление данных в таблицу
        • Чтение данных из таблицы
        • Обновление данных
        • Выборка данных
        • Удаление созданных ресурсов
      • Работа с AWS SDK
        • Обзор
        • Создание таблицы
        • Загрузка данных в таблицу
        • Управление записями в таблице
          • Создание записи
          • Чтение записи
          • Обновление записи
          • Удаление записи
        • Поиск и извлечение данных
        • Удаление таблицы
  • Практические руководства
    • Развертывание веб-приложения
    • Разработка Slack-бота
    • Подключение к YDB из функции Yandex Cloud Functions на Python
    • Подключение к базе данных YDB из функции Yandex Cloud Functions на Node.js
    • Конвертация видео в GIF на Python
    • Разработка навыка Алисы и сайта с авторизацией
  • Концепции
    • Обзор
    • Термины и определения
    • Соединение с БД и аутентификация
    • Модель данных и схема
    • Режимы работы Serverless и Dedicated
    • Транзакции
    • Вторичные индексы
    • Time to Live (TTL)
    • Скан запросы
    • Ограничения базы данных
    • Кластер YDB
      • Обзор
      • Общая схема YDB
      • Дисковая подсистема кластера
    • Квоты и лимиты
  • Пошаговые инструкции
    • Обзор
    • Переименование
    • Использование плана запроса и AST
    • Чтение и запись данных
    • Работа со вторичными индексами
  • Рекомендации
    • Обзор
    • Выбор первичного ключа для максимальной производительности
    • Вторичные индексы
    • Постраничный вывод
    • Загрузка больших объемов данных
    • Использование таймаутов
  • Управление базами данных
    • Обзор
    • Облачная консоль управления
      • Обзор
      • Создание, изменение, удаление баз данных
      • Таблицы и директории
      • Управление доступом
    • Интерфейс командной строки YC CLI
    • Резервное копирование и восстановление
    • Диагностика
      • Обзор
      • Системные таблицы
      • Мониторинг
  • Правила тарификации
    • Обзор
    • Бессерверный режим
      • Правила тарификации для бессерверного режима
      • Стоимость запроса для YQL
      • Стоимость запроса для Document API
      • Стоимость запроса для специальных API
    • Режим с выделенными инстансами
  • HTTP API, совместимый с Amazon DynamoDB
    • Все методы
    • Actions
      • BatchGetItem
      • BatchWriteItem
      • CreateTable
      • DeleteItem
      • DeleteTable
      • DescribeTable
      • DescribeTimeToLive
      • GetItem
      • ListTables
      • PutItem
      • Query
      • Scan
      • TransactGetItems
      • TransactWriteItems
      • UpdateItem
      • UpdateTimeToLive
    • Общие ошибки
  • YQL
    • Обзор
    • Типы данных
      • Обзор
      • Простые
      • Опциональные
      • Контейнеры
      • Специальные
      • Преобразования типов
      • Текстовое представление типов данных
      • JSON
    • Синтаксис
      • Обзор
      • Лексическая структура
      • Выражения
      • ACTION
      • ALTER TABLE
      • CREATE TABLE
      • DECLARE
      • DELETE
      • DISCARD
      • DROP TABLE
      • GROUP BY
      • FLATTEN
      • INSERT
      • INTO RESULT
      • JOIN
      • PRAGMA
      • REPLACE
      • SELECT
      • UPDATE
      • UPSERT
      • VALUES
      • WINDOW
      • Неподдерживаемые конструкции
    • Встроенные функции
      • Обзор
      • Базовые
      • Агрегатные
      • Оконные
      • Для работы со списками
      • Для работы со словарями
      • Для работы со структурами
      • Для работы с типами
      • Для работы с JSON
      • Библиотеки C++
        • Обзор
        • Hyperscan
        • Pcre
        • Pire
        • Re2
        • String
        • Unicode
        • DateTime
        • Url
        • Ip
        • Yson
        • Digest
        • Math
        • Histogram
    • Туториал YQL
      • Обзор
      • Создание таблицы
      • Добавление данных в таблицу
      • Выборка данных из всех колонок
      • Выборка данных из определенных колонок
      • Сортировка и фильтрация
      • Агрегирование данных
      • Дополнительные условия выборки
      • Объединение таблиц с помощью JOIN
      • Вставка и модификация данных с помощью REPLACE
      • Вставка и модификация данных с помощью UPSERT
      • Вставка данных с помощью INSERT
      • Обновление данных с помощью UPDATE
      • Удаление данных
      • Добавление и удаление колонок
      • Удаление таблицы
  • Работа с YDB CLI
    • Обзор
    • Установка
    • Структура команд YDB CLI
    • Сервисные команды
    • Соединение с БД и аутентификация
    • Глобальные параметры
    • Работа со схемой БД
      • Список объектов
      • Информация об объекте
      • Директории
      • Вторичные индексы
      • Переименование таблиц
    • Работа с данными
      • Выполнение запроса к данным
      • План исполнения запроса
      • Потоковое чтение таблицы
      • Скан запросы
    • Загрузка и выгрузка данных
      • Обзор
      • Файловая структура выгрузки
      • Выгрузка в файловую систему
      • Загрузка из файловой системы
      • Соединение и аутентификация с S3
      • Выгрузка в S3
      • Загрузка из S3
      • Импорт данных из файла в существующую таблицу
    • Управление профилями
      • Обзор
      • Создание профиля
      • Использование профиля в запросах
      • Получение информации о профиле
      • Удаление профиля
      • Активированный профиль
    • Информационные сервисы
      • Список эндпоинтов
      • Проверка аутентификации
    • Нагрузочное тестирование
      • Обзор
      • Stock нагрузка
  • Работа с YDB SDK
    • Обзор
    • Установка
    • Аутентификация
    • Тестовое приложение
      • Обзор
      • C++
      • C# (.NET)
      • Go
      • Java
      • Node.js
      • PHP
      • Python
      • Архив
        • Go v1
        • Go v2
    • Обработка ошибок в API
    • Рецепты кода
      • Обзор
      • Аутентификация
        • Обзор
        • С помощью токена
        • Анонимная
        • Файл сервисного аккаунта
        • Сервис метаданных
        • С помощью переменных окружения
        • С помощью логина и пароля
      • Балансировка
        • Обзор
        • Равномерный случайный выбор
        • Предпочитать ближайший дата-центр
        • Предпочитать зону доступности
      • Выполнение повторных запросов
      • Диагностика проблем
        • Обзор
        • Включить логирование
        • Подключить метрики в Prometheus
        • Подключить трассировку в Jaeger
      • Установить размер пула сессий
      • Вставка данных
      • Пакетная вставка данных
  • Управление кластером
    • Обзор
    • Kubernetes
      • Обзор
      • Развертывание в Yandex Managed Service for Kubernetes
      • Развертывание в AWS Elastic Kubernetes Service
      • Эксплуатация
    • Вручную
      • Локальная установка
      • Конфигурация кластера
      • Обслуживание дисковой подсистемы кластера
        • Обзор
        • Способы предотвращения выхода за модель отказа
        • Балансировка нагрузки на диски
        • Способы освобождения места на физических устройствах
        • Расширение кластера
        • Добавление групп хранения
        • Безопасные рестарт и выключение узлов
        • Включение/выключение SelfHeal
        • Включение/выключение Scrubbing
        • Перевоз VDisk'ов
        • Изменение конфигураций через CMS
        • Изменение конфигурации акторсистемы
    • Встроенный UI
      • Обзор
      • YDB Monitoring
      • Hive web-viewer
      • Обзор соединений
      • Логи
      • Графики
    • Системные таблицы
  • Вопросы и ответы
    • Обзор
    • Общие вопросы
    • Ошибки
    • YQL
    • Serverless
    • Все вопросы на одной странице
  • Публичные материалы
  1. Начало работы
  2. Document API, совместимый с Amazon DynamoDB
  3. Работа с AWS SDK
  4. Управление записями в таблице
  5. Чтение записи

Чтение записи

Статья создана
Yandex.Cloud

    Чтобы прочитать запись из таблицы Series:

    Java
    Python
    PHP
    Node.js
    Ruby
    1. Создайте проект SeriesItemOps02:

      mvn -B archetype:generate \
        -DarchetypeGroupId=org.apache.maven.archetypes \
        -DgroupId=ru.yandex.cloud.samples \
        -DartifactId=SeriesItemOps02
      

      В результате выполнения команды в текущем рабочем каталоге будет создан каталог проекта с именем SeriesItemOps02, структурой подкаталогов и файлом описания проекта pom.xml.

    2. Перейдите в каталог проекта:

      cd SeriesItemOps02
      
    3. Отредактируйте описание проекта в файле pom.xml, например с помощью редактора nano:

      nano pom.xml
      

      Пример файла pom.xml:

      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>ru.yandex.cloud.samples</groupId>
        <artifactId>SeriesItemOps02</artifactId>
        <packaging>jar</packaging>
        <version>1.0-SNAPSHOT</version>
        <name>SeriesItemOps02</name>
        <url>http://maven.apache.org</url>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <configuration>
                        <archive>
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <classpathPrefix>lib/</classpathPrefix>
                                <mainClass>ru.yandex.cloud.samples.SeriesItemOps02</mainClass>
                            </manifest>
                            <manifestEntries>
                                <Class-Path>.</Class-Path>
                            </manifestEntries>
                        </archive>
                        <finalName>release/SeriesItemOps02</finalName>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>copy-dependencies</id>
                            <phase>prepare-package</phase>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${project.build.directory}/release/lib</outputDirectory>
                                <overWriteReleases>false</overWriteReleases>
                                <overWriteSnapshots>false</overWriteSnapshots>
                                <overWriteIfNewer>true</overWriteIfNewer>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
        <dependencies>
          <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
          </dependency>
          <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-dynamodb</artifactId>
            <version>1.11.1012</version>
          </dependency>
        </dependencies>
        <properties>
          <maven.compiler.source>1.8</maven.compiler.source>
          <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
      </project>
      

      Посмотрите актуальные версии junit и aws-java-sdk-dynamodb.

    4. В каталоге src/main/java/ru/yandex/cloud/samples/ создайте файл SeriesItemOps02.java, например с помощью редактора nano:

      nano src/main/java/ru/yandex/cloud/samples/SeriesItemOps02.java
      

      Скопируйте в созданный файл следующий код:

      Важно

      Вместо <Document API эндпоинт> укажите подготовленное ранее значение.

      package ru.yandex.cloud.samples;
      
      import com.amazonaws.client.builder.AwsClientBuilder;
      import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
      import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
      import com.amazonaws.services.dynamodbv2.document.DynamoDB;
      import com.amazonaws.services.dynamodbv2.document.Item;
      import com.amazonaws.services.dynamodbv2.document.Table;
      import com.amazonaws.services.dynamodbv2.document.spec.GetItemSpec;
      
      public class SeriesItemOps02 {
      
          public static void main(String[] args) throws Exception {
      
              AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
                  .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("<Document API эндпоинт>", "ru-central1"))
                  .build();
      
              DynamoDB dynamoDB = new DynamoDB(client);
      
              Table table = dynamoDB.getTable("Series");
      
              int series_id = 3;
              String title = "Supernatural";
      
              GetItemSpec spec = new GetItemSpec().withPrimaryKey("series_id", series_id, "title", title);
      
              try {
                  System.out.println("Попытка получить запись...");
                  Item outcome = table.getItem(spec);
                  System.out.println("Получена запись: " + outcome);
              }
              catch (Exception e) {
                  System.err.println("Невозможно получить запись: " + series_id + " " + title);
                  System.err.println(e.getMessage());
              }
      
          }
      }
      

      Для чтения записи по ее первичному ключу используется метод getItem.

    5. Соберите проект:

      mvn package
      

      В результате выполнения команды в каталоге target/release/ будет сгенерирован файл SeriesItemOps02.jar.

    6. Запустите приложение:

      java -jar target/release/SeriesItemOps02.jar
      

      Результат выполнения:

      Попытка получить запись...
      Получена запись: { Item: {title=Supernatural, series_id=3, info={release_date=2015-09-13, series_info=Supernatural is an American television series created by Eric Kripke}} }
      
    1. Создайте файл SeriesItemOps02.py, например с помощью редактора nano:

      nano SeriesItemOps02.py
      

      Скопируйте в созданный файл следующий код:

      Важно

      Вместо <Document API эндпоинт> укажите подготовленное ранее значение.

      from pprint import pprint
      import boto3
      from botocore.exceptions import ClientError
      
      def get_serie(title, series_id):
          ydb_docapi_client = boto3.resource('dynamodb', endpoint_url = "<Document API эндпоинт>")
      
          table = ydb_docapi_client.Table('Series')
      
          try:
              response = table.get_item(Key = {'series_id': series_id, 'title': title})
          except ClientError as e:
              print(e.response['Error']['Message'])
          else:
              return response['Item']
      
      if __name__ == '__main__':
          serie = get_serie("Supernatural", 3,)
          if serie:
              print("Получена запись:")
              pprint(serie, sort_dicts = False)
      

      Для чтения записи из таблицы используется метод get_item, в котором нужно передать атрибуты первичного ключа нужной записи.

    2. Запустите программу:

      python SeriesItemOps02.py
      

      Результат выполнения:

      Получена запись:
      {'series_id': Decimal('3'),
      'title': ' Supernatural,
      'info': {'release_date': 2015-09-13',
                'series_info': 'Supernatural is an American television series '
                              'created by Eric Kripke'}}
      
    1. Создайте файл SeriesItemOps02.php, например с помощью редактора nano:

      nano SeriesItemOps02.php
      

      Скопируйте в созданный файл следующий код:

      Важно

      Вместо <Document API эндпоинт> укажите подготовленное ранее значение.

      <?php
      
      require 'vendor/autoload.php';
      
      date_default_timezone_set('UTC');
      
      use Aws\DynamoDb\Exception\DynamoDbException;
      use Aws\DynamoDb\Marshaler;
      
      $sdk = new Aws\Sdk([
          'endpoint' => '<Document API эндпоинт>',
          'region'   => 'ru-central1',
          'version'  => 'latest'
      ]);
      
      $dynamodb = $sdk->createDynamoDb();
      $marshaler = new Marshaler();
      
      $tableName = 'Series';
      
      $series_id = 3;
      $title = 'Supernatural';
      
      $key = $marshaler->marshalJson('
          {
              "series_id": ' . $series_id . ', 
              "title": "' . $title . '"
          }
      ');
      
      $params = [
          'TableName' => $tableName,
          'Key' => $key
      ];
      
      try {
          $result = $dynamodb->getItem($params);
          echo json_encode($result["Item"], JSON_PRETTY_PRINT);
      
      } catch (DynamoDbException $e) {
          echo "Невозможно получить запись:\n";
          echo $e->getMessage() . "\n";
      }
      
      ?>
      

      Для чтения записи по ее первичному ключу используется метод getItem.

    2. Запустите программу:

      php SeriesItemOps02.php
      

      Результат выполнения:

      {
          "series_id": {
              "N": ".3e1"
          },
          "title": {
              "S": "Supernatural"
          },
          "info": {
              "M": {
                  "release_date": {
                      "S": "2015-09-13"
                  },
                  "series_info": {
                      "S": "Supernatural is an American television series created by Eric Kripke"
                  }
              }
          }
      }
      
    1. Создайте файл SeriesItemOps02.js, например с помощью редактора nano:

      nano SeriesItemOps02.js
      

      Скопируйте в созданный файл следующий код:

      Важно

      Вместо <Document API эндпоинт> укажите подготовленное ранее значение.

      var AWS = require("aws-sdk");
      
      AWS.config.update({
        region: "ru-central1",
        endpoint: "<Document API эндпоинт>"
      });
      
      var docClient = new AWS.DynamoDB.DocumentClient();
      
      var table = "Series";
      
      var series_id = 3;
      var title = "Supernatural";
      
      var params = {
          TableName: table,
          Key:{
              "series_id": series_id,
              "title": title
          }
      };
      
      docClient.get(params, function(err, data) {
          if (err) {
              console.error("Не удалось прочитать запись. Ошибка JSON:", JSON.stringify(err, null, 2));
              process.exit(1);
          } else {
              console.log("Чтение записи успешно:", JSON.stringify(data, null, 2));
          }
      });
      

      Для чтения записи из таблицы используйте метод get. Указав значения первичного ключа (series_id и title), можно прочитать любую запись из таблицы Series.

    2. Запустите программу:

      node SeriesItemOps02.js
      

      Результат выполнения:

      Чтение записи успешно: {
        "Item": {
          "series_id": 3,
          "title": "Supernatural",
          "info": {
            "series_info": "Supernatural is an American television series created by Eric Kripke",
            "release_date": "2015-09-13"
          }
        }
      }
      
    1. Создайте файл SeriesItemOps02.rb, например с помощью редактора nano:

      nano SeriesItemOps02.rb
      

      Скопируйте в созданный файл следующий код:

      Важно

      Вместо <Document API эндпоинт> укажите подготовленное ранее значение.

      require 'aws-sdk-dynamodb'
      
      def get_item_from_table(dynamodb_client, table_item)
        result = dynamodb_client.get_item(table_item)
        puts "#{result.item['title']} (#{result.item['series_id'].to_i}):"
        puts "  Release date: #{result.item['info']['release_date']}"
        puts "  Series info: #{result.item['info']['series_info']}"
      rescue StandardError => e
        puts "Ошибка получения сериала '#{table_item[:key][:title]} " \
              "(#{table_item[:key][:series_id]})': #{e.message}"
      end
      
      def run_me
        region = 'ru-central1'
        table_name = 'Series'
        title = 'Supernatural'
        series_id = 3
      
        Aws.config.update(
          endpoint: '<Document API эндпоинт>',
          region: region
        )
      
        dynamodb_client = Aws::DynamoDB::Client.new
      
        table_item = {
          table_name: table_name,
          key: {
            series_id: series_id,
            title: title
          }
        }
      
        puts "Получение информации о '#{title} (#{series_id})' " \
          "из таблицы '#{table_name}'..."
        get_item_from_table(dynamodb_client, table_item)
      end
      
      run_me if $PROGRAM_NAME == __FILE__
      

      Для чтения записи из таблицы используйте метод get_item, где указав значение первичного ключа (series_id и title), можно прочитать любую запись из таблицы Series.

    2. Запустите программу:

      ruby SeriesItemOps02.rb
      

      Результат выполнения:

      Получение информации о 'Supernatural (3)' из таблицы 'Series'...
      Supernatural (3):
        Release date: 2015-09-13
        Series info: Supernatural is an American television series created by Eric Kripke
      

    Была ли статья полезна?

    Language / Region
    © 2022 ООО «Яндекс.Облако»