Store
Оператор Store создает файл QVD, Parquet, CSV или TXT.
Синтаксис:
Store [ fieldlist from] table into filename [ format-spec ];
Оператор создаст файл с заданным именем QVD, Parquet или текстовый файл.
Оператор может экспортировать поля только из одной таблицы данных за исключением случаев, когда выполняется сохранение в Parquet. Если требуется экспортировать поля из нескольких таблиц в файл QVD, CSV или TXT, необходимо заранее сформировать явное объединение join в скрипте для создания таблицы данных, которую следует экспортировать. Можно сохранить несколько таблиц в один файл Parquet, вкладывая данные в файлы Parquet.
Текстовые значения экспортируются в файл CSV в UTF-8 в формате BOM. Можно указать разделитель. См. LOAD. Оператор store для файла CSV не поддерживает экспорт BIFF.
Можно указать, хранить ли файл в личном пространстве или общем пространстве при наличии разрешений на запись. При хранении файла в общем пространстве участники могут использовать эти данные для создания приложений в этом пространстве. См. раздел: Управление разрешениями в общих пространствах.
Аргументы:
Аргумент | Описание |
---|---|
fieldlist::= ( * | field) { , field } ) |
Список полей, которые необходимо выбрать. Символ «*» в качестве списка полей обозначает все поля. field::= fieldname [as aliasname ] fieldname — это текст, идентичный имени поля в элементе table. (Обратите внимание, что для указания имени поля необходимо заключить его в прямые двойные кавычки или квадратные скобки, если имя содержит пробелы или другие нестандартные символы.) aliasname — альтернативное имя поля, которое предназначено для использования в результирующем файле QVD или CSV. |
table | Метка скрипта, представляющая уже загруженную таблицу, которую планируется использовать в качестве источника данных. |
filename |
Имя целевого файла, включая действительный путь к существующему подключению к данным папки. Для получения дополнительной информации о том, что считается действительным путем, см. раздел Правила правильного указания путей к папкам пространства. В Аналитика Qlik Cloud поддерживаются иерархические структуры папок, и на них можно ссылаться в пределах оператора. Примеры:
Для получения дополнительной информации и примеров см. раздел Хранение файлов в пространствах в Аналитика Qlik Cloud. |
format-spec ::=( ( txt | qvd | parquet), compression is codec) |
Можно установить спецификацию формата на любой из этих форматов файлов. Если формат не указан, то используется qvd.
Если используется parquet, также можно задать, какой кодек сжатия будет использоваться вместе с параметром compression is. Если не указать кодек сжатия для параметра compression is, используется snappy. Доступны следующие настройки сжатия:
Пример: Store mytable into [lib://DataFiles/myfile.parquet] (parquet, compression is lz4); |
Примеры:
Store mytable into [lib://DataFiles/xyz.qvd];
Store * from mytable into [lib://DataFiles/myfile.qvd];
Store Name, RegNo from mytable into [lib://DataFiles/xyz.qvd];
Store Name as a, RegNo as b from mytable into [lib://DataFiles/myfile.qvd];
Store mytable into [lib://DataFiles/myfile.txt] (txt);
Store mytable into [lib://DataFiles/myfile.parquet] (parquet);
Store * from mytable into [lib://DataFiles/myfile.csv] (txt);
Store * from mytable into [lib://TeamSharedSpace:DataFiles/myfile.qvd];
Хранение в файлах Parquet
Parquet — это строго типизированный формат файлов, в котором каждое поле содержит один определенный тип данных (например, in32, double, timestamp или text). Qlik Sense хранит внутренние данные в виде свободно типизированной дуальной системы, где данные из разных источников могут смешиваться в одних и тех же полях. Поскольку в каждом поле Parquet может храниться только одна часть дуальной системы, важно знать, что содержит каждое поле. По умолчанию Qlik Sense использует тип поля для определения способа его хранения. При хранении данных в файлах Parquet в определенном формате при их загрузке необходимо указать, к какому типу данных относятся ваши поля. Если попытаться сохранить данные в несовместимых полях файла Parquet, например, числа в текстовом поле или текст в поле временной метки, то в итоге будут получены нулевые значения.
При загрузке данных, которые предполагается хранить в Parquet, можно изменить поведение по умолчанию. Можно либо отформатировать их для изменения типа данных, либо пометить его для принудительного использования определенных типов столбцов в Parquet.
Форматирование данных для хранения в Parquet
Для классификации данных можно использовать функции форматирования Qlik Sense. Например, Text(), Num(), Interval() или Timestamp() могут обеспечивать соблюдение форматов данных при их хранении в Parquet. Qlik Sense может хранить данные почти в 20 типах данных в зависимости от атрибутов поля и автоматических тегов поля. Для получения дополнительной информации см. раздел Функции интерпретации.
Пример: Форматирование данных с помощью Num() и Text()
Следующий пример демонстрирует подготовку данных для хранения в Parquet. Num() применяется к числовому полю. Text() применяется к полю как текстового, так и смешанного типа. В случае смешанного поля Text() предотвращает его обработку в Parquet как числового поля и замену текстовых значений на нулевые.
NoConcatenate LOAD num, text, Text(mixed) as mixed RESIDENT Data; STORE Format INTO [lib://DataFiles/Tmp.parquet] (parquet);
Пометка данных тегами для хранения в Parquet
Для принудительного использования определенных типов столбцов при хранении данных в Parquet применяются теги $parquet. Каждый тип данных может быть принудительно установлен путем добавления соответствующего управляющего тега. Например, чтобы сохранить поле как INT32 в Parquet, пометьте его тегом $parquet-int32 в скрипте загрузки. В зависимости от типа данных будет храниться либо строковое, либо числовое представление двойных данных.
Следующие управляющие теги Parqeut могут использоваться для пометки полей для хранения в файлах Parquet.
Управляющий тег | Двойное значение | Физический тип | Логический тип | Преобразованный тип |
---|---|---|---|---|
$parquet-boolean | Число | BOOLEAN | NONE | NONE |
$parquet-int32 | Число | INT32 | NONE | NONE |
$parquet-int64 | Число | INT64 | NONE | NONE |
$parquet-float | Число | FLOAT; | NONE | NONE |
$parquet-double | Число | DOUBLE | NONE | NONE |
$parquet-bytearray | Строка | BYTE_ARRAY | NONE | UTF8 |
$parquet-bytearrayfix | Число | FIXED_LEN_BYTE_ARRAY | NONE | DECIMAL |
$parquet-decimal | Число | INT64 | DECIMAL | DECIMAL |
$parquet-date | Число | INT32 | DATE | DATE |
$parquet-time | Число | INT64 | TIME | TIME_MICROS |
$parquet-timestamp | Число | INT64 | TIMESTAMP | TIMESTAMP_MICROS |
$parquet-string | Строка | BYTE_ARRAY | STRING | UTF8 |
$parquet-enum | Строка | BYTE_ARRAY | ENUM | ENUM |
$parquet-interval | Число | FIXED_LEN_BYTE_ARRAY | INTERVAL | INTERVAL |
$parquet-json | Строка | BYTE_ARRAY | JSON | JSON |
$parquet-bson | Строка | BYTE_ARRAY | BSON | BSON |
$parquet-uuid | Строка | FIXED_LEN_BYTE_ARRAY | UUID | NONE |
Пример: Пометка данных тегами для хранения в Parquet
В этом примере для определения данных для Parquet используются два тега. Поле num помечается тегом $parquet-int32, определяющим его как числовое поле, которое в Parquet будет установлено как INT32.
Хранение вложенных данных в файлах Parquet
Можно хранить несколько таблиц в файлах Parquet путем их вложения в структурированные данные. Store поддерживает структурированные узлы и перечисляет узлы в схеме тип «звезда». Одиночные таблицы также можно хранить в режиме вложения, используя спецификатор Разделитель ―.
При хранении таблиц через запятую укажите таблицы, которые требуется включить. Например: STORE Table1, Table2, Table3 INTO [lib://<file location>/<file name>.parquet] (parquet);. Можно задать сохраняемые поля, используя список полей в операторе Store. Например, STORE Field1, Field2, FROM Table1, Table2 INTO [lib://<file location>/<file name>.parquet] (parquet);. Все поля в списке должны быть включены в одну или несколько перечисленных таблиц. Первая таблица в операторе Store будет использоваться в качестве таблицы фактов в схеме типа «звезда».
Имена полей используются для управления порядком создания и вложения групп. По умолчанию имена полей делятся на узлы с помощью точки (.). Разделитель можно изменить: для этого задайте системную переменную FieldNameDelimiter или используйте спецификатор Разделитель ―. Спецификатор переопределяет системную переменную. Для получения дополнительной информации см. раздел Работа с переменными в редакторе загрузки данных.
Имена полей делятся с использованием разделителя, а части используются для создания схемы с вложенными группами. Например, STORE Field1, Field1.Field2, Field1.Field3, Field1.Field4 FROM Table1 INTO [nested.parquet] (parquet, delimiter is '.'); создает две группы (Group1 и Group2) с полями Fields1, Field2 и Field3, Field4.
При хранении вложенных таблиц в Parquet ключи между таблицами преобразуются в узлы ссылок в схеме. Таблицы преобразуются в структурированные узлы в схеме. Можно переопределить преобразование по умолчанию, используя имена полей.
Пример: Хранение вложенных данных в файле Parquet
Итоговый файл Parquet имеет следующую схему:
Ограничения
В отношении хранения вложенных данных в Parquet действуют следующие ограничения:
Хранение не поддерживает узлы карт.
Хранение не включает ключевые поля, созданные в результате загрузки вложенных файлов parquet.
Невозможно хранить вместе данные из таблиц, не связанных с помощью ключевых полей.
Вложенный файл денормализует модель данных. Значения, ссылки на которые отсутствуют, не будут сохраняться, а значения, упоминаемые по ссылке несколько раз, будут копироваться.
Хранение файлов в пространствах в Аналитика Qlik Cloud
При использовании оператора Store в скрипте загрузки в Qlik Cloud можно ссылаться на точную папку в пространстве, где будут храниться созданные файлы. Придерживайтесь правил по правильному указанию путей к папкам пространства. Дополнительно, следующие поведения также применяются и являются уникальными для заявлений Store:
Если пространство существует, а указанный путь к папке ― нет, путь будет создан в этом пространстве. В зависимости от определенной структуры папок может быть создана одна или несколько папок. Файл создается и сохраняется там.
Если пространство существует, но в указанном пути к папке используются недопустимые разделители папок (например, \, \\, //, /./ или /../), оператор Store все равно будет выполнен. Вместо этого выходной файл сохраняется в пути верхнего уровня в целевом пространстве, его имя содержит полный путь, а не просто указанное имя.
Если пространство не существует, оператор Store не может быть выполнен и возвращает ошибку.
Следующие примеры демонстрируют, как ссылаться на конкретный путь к папке в пространстве в рамках оператора Store.
Пример: Сохранение файла в пути верхнего уровня пространства
В этом примере вся таблица mytable экспортируется в Аналитика Qlik Cloud как файл с именем myfile.qvd. Файл добавляется в общее пространство TeamSharedSpace. Файл не находится в определенной папке, а расположен в пути верхнего уровня в пространстве.
Store * from mytable into [lib://TeamSharedSpace:DataFiles/myfile.qvd];
Пример: Сохранение файла в определенном пути к папке в пределах пространства
В этом примере вся таблица mytable экспортируется в Аналитика Qlik Cloud как файл с именем myfile.qvd. Файл добавляется в папку SalesData в пространстве TeamSharedSpace.
Store * from mytable into [lib://TeamSharedSpace:DataFiles/SalesData/myfile.qvd];
Для получения дополнительной информации о том, как ссылаться на структуру папок пространства в скриптах загрузки, см. раздел Ссылка на структуру папок в пространстве при разработке приложений и скриптов.