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

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. Можно указать разделитель. См. LOAD. Оператор store для файла CSV не поддерживает экспорт BIFF.

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

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

Аргументы:  

Сохранить аргументы команды
Аргумент Описание
fieldlist::= ( * | field) { , field } )

Список полей, которые необходимо выбрать. Символ «*» в качестве списка полей обозначает все поля. 

field::= fieldname [as aliasname ]

fieldname — это текст, идентичный имени поля в элементе table. (Обратите внимание, что для указания имени поля необходимо заключить его в прямые двойные кавычки или квадратные скобки, если имя содержит пробелы или другие нестандартные символы.)

aliasname — альтернативное имя поля, которое предназначено для использования в результирующем файле QVD или CSV.

table Метка скрипта, представляющая уже загруженную таблицу, которую планируется использовать в качестве источника данных.
filename

Имя целевого файла, включая действительный путь к существующему подключению к данным папки.

Пример:  

  • Личное пространство: [lib://DataFiles/xyz.qvd]

    Иерархии пути с разделителями «/» могут использоваться в именах файлов. Однако интерфейс редактора загрузки данных и менеджера данных в настоящее время не поддерживает отображение путей в виде иерархии. Если используется имя файла с разделителями «/», оно будет отображаться полностью в столбце имени файла.

  • Общее пространство: [lib://TeamSharedSpace:DataFiles/xyz.qvd]
format-spec ::=( ( txt | qvd | parquet), compression is codec)

Можно установить спецификацию формата на любой из этих форматов файлов. Если формат не указан, то используется qvd.

  • txt для файлов CSV и TXT.

  • qvd для файлов QVD.

  • parquet для файлов Parquet.

Если используется parquet, также можно задать, какой кодек сжатия будет использоваться вместе с параметром compression is. Если не указать кодек сжатия для параметра compression is, используется snappy. Доступны следующие настройки сжатия:

  • uncompressed

  • snappy

  • gzip

  • lz4

  • brotli

  • zstd

  • lz4_hadoop

Пример:

Store mytable into [lib://DataFiles/myfile.parquet] (parquet, compression is lz4);

Примечание к информацииПри вводе расширения файла подключений DataFiles учитывается регистр. Например: .qvd.

Примеры:  

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 как числового поля и замену текстовых значений на нулевые.

Data: LOAD * INLINE [ num, text, mixed 123.321, abc, 123 456.654, def, xyz 789.987, ghi, 321 ]; Format:
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
Управляющий тегДвойное значениеФизический типЛогический типПреобразованный тип
$parquet-booleanЧислоBOOLEANNONENONE
$parquet-int32ЧислоINT32NONENONE
$parquet-int64ЧислоINT64NONENONE
$parquet-floatЧислоFLOAT;NONENONE
$parquet-doubleЧислоDOUBLENONENONE
$parquet-bytearrayСтрокаBYTE_ARRAYNONEUTF8
$parquet-bytearrayfixЧислоFIXED_LEN_BYTE_ARRAYNONEDECIMAL
$parquet-decimalЧислоINT64DECIMALDECIMAL
$parquet-dateЧислоINT32DATEDATE
$parquet-timeЧислоINT64TIMETIME_MICROS
$parquet-timestampЧислоINT64TIMESTAMPTIMESTAMP_MICROS
$parquet-stringСтрокаBYTE_ARRAYSTRINGUTF8
$parquet-enumСтрокаBYTE_ARRAYENUMENUM
$parquet-intervalЧислоFIXED_LEN_BYTE_ARRAYINTERVALINTERVAL
$parquet-jsonСтрокаBYTE_ARRAYJSONJSON
$parquet-bsonСтрокаBYTE_ARRAYBSONBSON
$parquet-uuidСтрокаFIXED_LEN_BYTE_ARRAYUUIDNONE

Пример: Пометка данных тегами для хранения в Parquet

В этом примере для определения данных для Parquet используются два тега. Поле num помечается тегом $parquet-int32, определяющим его как числовое поле, которое в Parquet будет установлено как INT32.

Data: LOAD * INLINE [ num, text, 123.321, abc 456.654, def 789.987, ghi ]; TAG num WITH '$parquet-int32'; STORE Format INTO [lib://DataFiles/Tmp.parquet] (parquet);

Хранение вложенных данных в файлах 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.

Примечание к информацииВ узле схемы не должны совпадать имена групп и полей. Например, STORE Address, Address.Street INTO [nested.parquet] (parquet, delimiter is '.''); приведет к ошибке, так как имя Address (Адрес) не является однозначным и относится к полю данных и группе одновременно.

При хранении вложенных таблиц в Parquet ключи между таблицами преобразуются в узлы ссылок в схеме. Таблицы преобразуются в структурированные узлы в схеме. Можно переопределить преобразование по умолчанию, используя имена полей.

Пример: Хранение вложенных данных в файле Parquet

company: LOAD * INLINE [ company, contact A&G, Amanda Honda Cabro, Cary Frank Fenwick, Dennis Fisher Camros, Molly McKenzie ]; salesrep: LOAD * INLINE [ company, salesrep A&G, Bob Park Cabro, Cezar Sandu Fenwick, Ken Roberts Camros, Max Smith ]; headquarter: LOAD * INLINE [ company, country, city A&G, USA, Los Angeles Cabro, USA, Albuquerque Fenwick, USA, Baltimore Camros, USA, Omaha ]; region: LOAD * INLINE [ region, city West, Los Angeles Southwest, Albuquerque East, Baltimore Central, Omaha ]; STORE company, salesrep, headquarter, region INTO [lib://DataFiles/company.parquet] (parquet); DROP TABLES company, salesrep, headquarter, region;

Итоговый файл Parquet имеет следующую схему:

company (String) contact (String) company:salesrep (List) salesrep (Group) salesrep (String) company:headquarter (List) headquarter (Group) country (String) city (String) city:region (List) region (Group) region (String)

Ограничения

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

  • Хранение не поддерживает узлы карт.

  • Хранение не включает ключевые поля, созданные в результате загрузки вложенных файлов parquet.

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

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

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

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