Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • ИИ для бизнеса
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex MPP Analytics for PostgreSQL
  • Начало работы
    • Все инструкции
      • Обзор
      • Создание внешней таблицы
      • Изменение настроек PXF
    • Подключение к внешнему файловому серверу (gpfdist)
    • Вспомогательные утилиты
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений
  • Обучающие курсы

В этой статье:

  • Перед началом работы
  • Создание внешней таблицы с помощью SQL-запроса
  • Примеры создания внешних таблиц
  1. Пошаговые инструкции
  2. Работа с PXF
  3. Создание внешней таблицы

Создание внешней таблицы по протоколу PXF

Статья создана
Yandex Cloud
Обновлена 13 ноября 2025 г.
  • Перед началом работы
  • Создание внешней таблицы с помощью SQL-запроса
  • Примеры создания внешних таблиц

Перед началом работыПеред началом работы

  1. В подсети кластера Greenplum® настройте NAT-шлюз и привяжите таблицу маршрутизации.

  2. В той же подсети создайте группу безопасности, разрешающую весь входящий и исходящий трафик со всех адресов.

  3. Создайте внешний источник данных. Инструкции по созданию зависят от типа подключения источника:

    • S3
    • JDBC
    • HDFS
    • Hive

Создание внешней таблицы с помощью SQL-запросаСоздание внешней таблицы с помощью SQL-запроса

Синтаксис SQL-запроса на создание внешней таблицы:

CREATE [WRITABLE] EXTERNAL TABLE <имя_таблицы>
       (<имя_столбца> <тип_данных> [, ...])
       LOCATION('pxf://<путь_к_данным_или_имя_таблицы>?PROFILE=<имя_профиля>&SERVER=<имя_источника>')
       FORMAT '[TEXT|CSV|CUSTOM]';

Где:

  • <имя_таблицы> — имя внешней таблицы, которая будет создана в кластере Greenplum®.

  • <имя_столбца> — имя столбца.

  • <тип_данных> — тип данных столбца. Должен совпадать с типом данных столбца таблицы во внешней СУБД.

  • <путь_к_данным_или_имя_таблицы> — имя внешнего объекта, см. примеры внешних таблиц.

  • PROFILE — стандарт взаимодействия с внешней СУБД (профиль). Например, JDBC. Список возможных значений зависит от типа подключения:

    • S3;
    • JDBC;
    • HDFS и Hive.
  • SERVER — имя внешнего источника данных PXF.

    Вместо SERVER вы можете передать параметры, которые задают конфигурацию внешнего источника данных. Они зависят от типа подключения источника. Подробнее см. в документации Greenplum® PXF и примерах создания внешних таблиц.

Опция WRITABLE позволяет записывать данные во внешний объект. Чтобы считать данные из внешнего объекта, создайте внешнюю таблицу с опцией READABLE.

Примеры создания внешних таблицПримеры создания внешних таблиц

ClickHouse®
MySQL®
PostgreSQL
Object Storage
  1. Создайте кластер Yandex Managed Service for ClickHouse® с именем пользователя chuser.

  2. В подсети кластера настройте NAT-шлюз и создайте группу безопасности, разрешающую весь входящий и исходящий трафик со всех адресов.

  3. (Опционально) Создайте внешний источник данных JDBC с параметрами:

    • Имя — chserver;

    • Driver — com.clickhouse.jdbc.ClickHouseDriver;

    • Url — jdbc:clickhouse:http://c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:8123/db1, где:

      • c-<идентификатор_кластера>.rw.mdb.yandexcloud.net — особый FQDN, который всегда указывает на доступный хост кластера Managed Service for ClickHouse®.
      • 8123 — порт для подключения к кластеру Managed Service for ClickHouse®.
      • db1 — имя БД в кластере Managed Service for ClickHouse®.
    • User — chuser.

    Идентификатор кластера можно получить со списком кластеров в каталоге.

    Если не создать источник данных, параметры подключения к источнику нужно передать в SQL-запросе на создание внешней таблицы.

  4. Подключитесь к БД ClickHouse® с помощью утилиты clickhouse-client.

  5. Создайте тестовую таблицу и наполните ее данными:

    CREATE TABLE test (id int) ENGINE = Memory;
    
    INSERT INTO test VALUES (1);
    
  6. Подключитесь к БД Greenplum®.

  7. Создайте внешнюю таблицу pxf_ch, которая будет ссылаться на таблицу test в кластере ClickHouse®. SQL-запрос зависит от того, был ли создан ранее внешний источник данных:

    • С источником данных:

      CREATE READABLE EXTERNAL TABLE pxf_ch(id int)
      LOCATION ('pxf://test?PROFILE=JDBC&SERVER=chserver')
      FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
      
    • Без источника данных:

      CREATE READABLE EXTERNAL TABLE pxf_ch(id int)
      LOCATION ('pxf://test?PROFILE=JDBC&JDBC_DRIVER=com.clickhouse.jdbc.ClickHouseDriver&DB_URL=jdbc:clickhouse:http://c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:8123/db1&USER=chuser')
      FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
      

    Если для хостов ClickHouse® включен публичный доступ, при создании внешней таблицы необходимо использовать шифрованное соединение. Для этого укажите в запросе параметры SSL:

    • С источником данных:

      CREATE READABLE EXTERNAL TABLE pxf_ch(id int)
      LOCATION ('pxf://test?PROFILE=JDBC&SERVER=chserver&ssl=true&sslmode=strict&sslrootcert=/etc/greenplum/ssl/allCAs.pem')
      FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
      
    • Без источника данных:

      CREATE READABLE EXTERNAL TABLE pxf_ch(id int)
      LOCATION ('pxf://test?PROFILE=JDBC&JDBC_DRIVER=com.clickhouse.jdbc.ClickHouseDriver&DB_URL=jdbc:clickhouse:https://c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:8443/db1&USER=chuser&ssl=true&sslmode=strict&sslrootcert=/etc/greenplum/ssl/allCAs.pem')
      FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
      
  8. Получите данные из внешней таблицы:

    SELECT * FROM pxf_ch;
    

    Результат:

    test_pxf=> SELECT * FROM pxf_ch;
     id
    ----
      1
    (1 row)
    
  1. Создайте кластер Yandex Managed Service for MySQL® с настройками:

    • Имя пользователя — mysqluser.
    • В настройках хостов выберите опцию Публичный доступ.
  2. В подсети кластера настройте NAT-шлюз и создайте группу безопасности, разрешающую весь входящий и исходящий трафик со всех адресов.

  3. (Опционально) Создайте внешний источник данных JDBC с параметрами:

    • Имя — mysqlserver;

    • Driver — com.mysql.jdbc.Driver;

    • Url — jdbc:mysql://c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:3306/db1, где:

      • c-<идентификатор_кластера>.rw.mdb.yandexcloud.net — особый FQDN, который всегда указывает на текущий хост-мастер в кластере Managed Service for MySQL®.
      • 3306 — порт для подключения к кластеру Managed Service for MySQL®.
      • db1 — имя БД в кластере Managed Service for MySQL®.
    • User — mysqluser.

    Идентификатор кластера можно получить со списком кластеров в каталоге.

    Если не создать источник данных, параметры подключения к источнику нужно передать в SQL-запросе на создание внешней таблицы.

  4. Подключитесь к БД MySQL® с помощью утилиты mysql.

  5. Создайте тестовую таблицу и наполните ее данными:

    CREATE TABLE test (a INT, b INT);
    
    INSERT INTO test VALUES (1, '11'), (2, '22');
    
  6. Подключитесь к БД Greenplum®.

  7. Создайте внешнюю таблицу pxf_mysql, которая будет ссылаться на таблицу test в кластере MySQL®. SQL-запрос зависит от того, был ли создан ранее внешний источник данных:

    • С источником данных:

      CREATE READABLE EXTERNAL TABLE pxf_mysql(a int, b int)
      LOCATION ('pxf://test?PROFILE=JDBC&SERVER=mysqlserver')
      FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
      
    • Без источника данных:

      CREATE READABLE EXTERNAL TABLE pxf_mysql(a int, b int)
      LOCATION ('pxf://test?PROFILE=JDBC&JDBC_DRIVER=com.mysql.jdbc.Driver&DB_URL=jdbc:mysql://c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:3306/db1&USER=mysqluser')
      FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
      
  8. Получите данные из внешней таблицы:

    SELECT * FROM pxf_mysql;
    

    Результат:

    test_pxf=> SELECT * FROM pxf_mysql;
    a | b
    --+----
    1 | 11
    2 | 22
    (2 rows)
    
  1. Создайте кластер Yandex Managed Service for PostgreSQL с настройками:

    • Имя пользователя — pguser;
    • В настройках хостов выберите опцию Публичный доступ.
  2. В подсети кластера настройте NAT-шлюз и создайте группу безопасности, разрешающую весь входящий и исходящий трафик со всех адресов.

  3. (Опционально) Создайте внешний источник данных JDBC с параметрами:

    • Имя — pgserver;

    • Driver — org.postgresql.Driver;

    • Url — jdbc:postgresql://c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:6432/db1, где:

      • c-<идентификатор_кластера>.rw.mdb.yandexcloud.net — особый FQDN, который всегда указывает на текущий хост-мастер в кластере Managed Service for PostgreSQL.
      • 6432 — порт для подключения к кластеру Managed Service for PostgreSQL.
      • db1 — имя БД в кластере Managed Service for PostgreSQL.
    • User — pguser.

    Идентификатор кластера можно получить со списком кластеров в каталоге.

    Если не создать источник данных, параметры подключения к источнику нужно передать в SQL-запросе на создание внешней таблицы.

  4. Подключитесь к БД PostgreSQL с помощью утилиты psql.

  5. Создайте тестовую таблицу и наполните ее данными:

    CREATE TABLE public.test ("a" INT,"b" INT);
    
    INSERT INTO public.test VALUES (1, '11'), (2, '22');
    
  6. Подключитесь к БД Greenplum®.

  7. Создайте внешнюю таблицу pxf_pg, которая будет ссылаться на таблицу public.test в кластере PostgreSQL. SQL-запрос зависит от того, был ли создан ранее внешний источник данных:

    • С источником данных:

      CREATE READABLE EXTERNAL TABLE pxf_pg(a int, b int)
      LOCATION ('pxf://public.test?PROFILE=JDBC&SERVER=pgserver')
      FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
      
    • Без источника данных:

      CREATE READABLE EXTERNAL TABLE pxf_pg(a int, b int)
      LOCATION ('pxf://public.test?PROFILE=JDBC&JDBC_DRIVER=org.postgresql.Driver&DB_URL=jdbc:postgresql://c-<идентификатор_кластера>.rw.mdb.yandexcloud.net:6432/db1&USER=pguser')
      FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
      
  8. Получите данные из внешней таблицы:

    SELECT * FROM pxf_pg;
    

    Результат:

    test_pxf=> SELECT * FROM pxf_pg;
    a | b
    --+----
    1 | 11
    2 | 22
    (2 rows)
    
  1. В подсети кластера настройте NAT-шлюз и создайте группу безопасности, разрешающую весь входящий и исходящий трафик со всех адресов.

  2. Создайте бакет Object Storage с ограниченным доступом.

  3. Создайте статический ключ доступа.

  4. (Опционально) Создайте внешний источник данных S3 с параметрами:

    • Имя — objserver;
    • Access Key — идентификатор статического ключа доступа, созданного ранее;
    • Secret Key — секретыный ключ, созданный ранее вместе со статическим ключом доступа;
    • Endpoint — storage.yandexcloud.net.

    Если не создать источник данных, параметры подключения к источнику нужно передать в SQL-запросе на создание внешней таблицы.

  5. На локальной машине создайте тестовый файл test.csv:

    1,111
    2,222
    
  6. Загрузите тестовый файл в бакет.

    Файлы, которые вы загружаете в бакет, не должны начинаться с символов . и _. Такие файлы считаются скрытыми, и PXF не считывает из них данные.

  7. Подключитесь к БД Greenplum®.

  8. Чтобы считать данные из бакета Object Storage:

    1. Создайте внешнюю таблицу pxf_s3_read, которая будет ссылаться на бакет. SQL-запрос зависит от того, был ли создан ранее внешний источник данных:

      • С источником данных:

        CREATE READABLE EXTERNAL TABLE pxf_s3_read(a int, b int)
        LOCATION ('pxf://<имя_бакета>/test.csv?PROFILE=s3:text&SERVER=objserver')
        FORMAT 'CSV';
        
      • Без источника данных:

        CREATE READABLE EXTERNAL TABLE pxf_s3_read(a int, b int)
        LOCATION ('pxf://<имя_бакета>/test.csv?PROFILE=s3:text&accesskey=<идентификатор_ключа>&secretkey=<секретный_ключ>&endpoint=storage.yandexcloud.net')
        FORMAT 'CSV';
        
    2. Получите данные из внешней таблицы:

      SELECT * FROM pxf_s3_read;
      

      Результат:

      test_pxf=> SELECT * FROM pxf_s3_read;
      a | b
      ---+----
      1 | 111
      2 | 222
      (2 rows)
      
  9. Чтобы записать данные в бакет Object Storage:

    1. Создайте внешнюю таблицу pxf_s3_write с опцией WRITABLE. Имя файла при создании таблицы указывать не нужно:

      • С источником данных:

        CREATE WRITABLE EXTERNAL TABLE pxf_s3_write(a int, b int)
        LOCATION ('pxf://<имя_бакета>/?PROFILE=s3:text&SERVER=objserver')
        FORMAT 'CSV';
        
      • Без источника данных:

        CREATE WRITABLE EXTERNAL TABLE pxf_s3_write(a int, b int)
        LOCATION ('pxf://<имя_бакета>/?PROFILE=s3:text&accesskey=<идентификатор_ключа>&secretkey=<секретный_ключ>&endpoint=storage.yandexcloud.net')
        FORMAT 'CSV';
        
    2. Добавьте данные в таблицу:

      INSERT INTO pxf_s3_write VALUES (3,333);
      
      INSERT 0 1
      
    3. Убедитесь, что в бакете создан новый объект.

Примечание

Для создания внешней таблицы из Object Storage можно использовать протокол S3, передавая параметры статического ключа в файле, расположенном на веб-сервере. Подробнее см. в руководстве.

Greenplum® и Greenplum Database® являются зарегистрированными товарными знаками или товарными знаками Broadcom Inc в США и/или других странах.

ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc.

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

Предыдущая
Hive
Следующая
Изменение настроек PXF
Проект Яндекса
© 2025 ООО «Яндекс.Облако»