Перейти к основному содержимому Перейти к дополнительному содержимому

Работа с файлами Apache Parquet

Apache Parquet — это столбчатый формат хранения, очень эффективный для хранения информации и обработки запросов в больших наборах данных. В Qlik Sense можно считывать данные из файлов Parquet и сохранять таблицы как файлы Parquet.

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

Создание файлов Parquet

Файлы Parquet можно создавать с помощью команды Store в скрипте. Укажите в скрипте, что ранее считанную таблицу или ее часть необходимо экспортировать в явно названный файл в указанном вами местоположении. Хранящиеся данные можно вкладывать в файлы Parquet.

Для получения дополнительной информации см. раздел Store.

Чтение данных из файлов Parquet

Данные из файла Parquet можно считывать так же, как из любого другого файла данных, поддерживаемого Qlik Sense: через Диспетчер данных, редактор загрузки данных или при добавлении данных в новое приложение.

Для получения дополнительной информации см. раздел Загрузка данных из файлов.

Также можно загрузить данные из файла Parquet в скрипт загрузки данных с помощью команды LOAD. Пример.

LOAD * from [lib://DataFiles/xyz.parquet] (parquet);

Для получения дополнительной информации см. раздел Load.

Загрузка данных из вложенных файлов Parquet

Если файл Parquet содержит вложенные данные, его необходимо загружать с использованием нескольких операторов load, в каждом из которых указывается, какое подмножество должно загружаться в каждую таблицу. Спецификатор Table is служит для подтверждения пути к узлу группы в схеме для загрузки.

Спецификатор Разделитель ― можно использовать, чтобы указать порядок объединения узлов. Оператор LOAD, загружающий файл с вложенными данными без спецификатора «Разделитель ―», использует значение, заданное в переменной скрипта FieldNameDelimiter. Если спецификатор «Разделитель ―» не предоставлен и переменная FieldNameDelimiter не задана, то по умолчанию используется разделитель '.'.

Загружаются только узлы, соответствующие пути Table is.

Узел данных загружается в файл без вложения.

Узлы группы объединяют поля в группу путем добавления их имени в имя поля. Например, группа с полями field1 и field2 загружаются как group.field1 и group.field2.

Узлы списка будут создавать ключевые поля, используемые для связывания таблиц. Например, %Key_group.list. Любой узел группы или данных в списке должен загружаться в отдельном операторе load. Также будет загружено ключевое поле в родительском списке.

Следующие примеры показывают тот же вложенный файл Parquet, созданные в примере в Хранение вложенных данных в файлах Parquet, загруженные в приложение с использованием Диспетчер данных и Редактор загрузки данных (со значением по умолчанию из списка «Выберите данные и пользовательские скрипты»).

Пример: Диспетчер данных

Если customer.parquet загружается в Диспетчер данных и применяются все рекомендованные связи, будет создана следующая модель данных:

Модель данных для загрузки company.parquet с помощью Диспетчер данных

Модель данных, отображающая таблицы company:salesrep.salesrep, company, company:headquarter.headquarter и company:headquarter.headquarter.city:region.region

Пример: Редактор загрузки данных (Выбор данных)

Если данные загружаются с помощью экрана Выбор данных в Редактор загрузки данных, будет создан следующий скрипт:

LOAD company, contact, "%Key_company:headquarter", "%Key_company:salesrep" FROM [lib://DataFiles/company.parquet] (parquet); LOAD country, city, "%Key_city:region", "%Key_company:headquarter" FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter]); LOAD region, "%Key_city:region" FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter.city:region.region]); LOAD salesrep, "%Key_company:salesrep" FROM [lib://DataFiles/company.parquet] (parquet, table is [company:salesrep.salesrep]);

Модель данных выглядит как в Просмотр модели данных.

Модель данных для загрузки company.parquet с помощью экрана Выбор данных в Редактор загрузки данных

Модель данных, отображающая таблицы salesrep, company, headquarter и region.

Пример: Редактор загрузки данных (Пользовательский скрипт загрузки)

Если используется пользовательский скрипт загрузки, имеется больше возможностей для управления тем, какие поля и таблицы загружаются из customer.parquet. Следующий скрипт загружает таблицы и поля из company.parquet:

LOAD * FROM [lib://DataFiles/company.parquet] (parquet); LOAD *, Lookup('company', '%Key_company:salesrepo', [%Key_company:salesrep], 'company') as company; LOAD * FROM [lib://DataFiles/company.parquet] (parquet, table is [company:salesrep.salesrep]); DROP FIELD [%Key_company:salesrep]; LOAD *, Lookup('company', '%Key_company:headquarter', [%Key_company:headquarter], 'company') as company; LOAD * FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter]); DROP FIELD [%Key_company:headquarter]; LOAD *, Lookup('city', '%Key_city:region', [%Key_city:region], 'headquarter') as city; LOAD * FROM [lib://DataFiles/company.parquet] (parquet, table is [company:headquarter.headquarter.city:region.region]); DROP FIELD [%Key_city:region];

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

Модель данных для загрузки company.parquet с помощью пользовательского скрипта Редактор загрузки данных

Модель данных с таблицами headquarter, region, salesrep и company, которая точно соответствует модели данных из исходного приложения.

Ограничения

В отношении файлов Parquet действуют следующие ограничения:

  • Файлы Parquet, содержащие поле метки времени int96, загружаются неправильно.

    Int96 — это устаревший тип данных, содержащий метку времени без данных о часовом поясе. Будет предпринята попытка прочитать поле как UTC, но ее успех нельзя гарантировать, так как имеются разные реализации поставщиков.

    Проверьте загруженные данные и скорректируйте их с учетом правильного часового пояса, при необходимости указав смещение.

Помогла ли вам эта страница?

Если вы обнаружили какую-либо проблему на этой странице и с ее содержанием — будь то опечатка, пропущенный шаг или техническая ошибка, сообщите нам об этом, чтобы мы смогли ее исправить!