Как передать файл схемы в виде макросов в приемник BigQuery при объединении данных
Я создаю конвейер слияния данных для загрузки данных CSV из GCS в BigQuery для моего случая использования, мне нужно создать макросы свойств и предоставить значение во время выполнения. Необходимо понять, как мы можем передать файл схемы в виде макросов в приемник BigQuery. Если я просто передаю путь к файлу схемы JSON в значения макросов, я получаю следующую ошибку.
java.lang.IllegalArgumentException: неверная схема: используйте JsonReader.setLenient (true) для принятия искаженного JSON в строке 1, столбец 1
2 ответа
В настоящее время нет способа использовать содержимое файла в качестве значения макроса, хотя существует jira, открытая для чего-то подобного ( https://issues.cask.co/browse/CDAP-15424). Ожидается, что содержимое схемы должно быть установлено в качестве значения макроса. Пользовательский интерфейс в настоящее время не очень хорошо обрабатывает эти типы значений макросов ( https://issues.cask.co/browse/CDAP-15423), поэтому я бы предложил установить его через конечную точку REST ( https://docs.cdap.io/cdap/6.0.0/en/reference-manual/http-restful-api/preferences.html), где имя приложения - это имя конвейера.
Кроме того, вы можете сделать свой конвейер немного более общим, написав плагин Action, который выглядит примерно так:
@Override
public void run(ActionContext context) throws Exception {
String schema = readFileContents();
context.getArguments().setArgument(key, schema);
}
Плагин будет первым этапом в вашем конвейере и позволит последующим этапам в вашем конвейере использовать ${key} в качестве макроса, который будет заменен реальной схемой.
Если вы используетеBatchSink
Вы можете прочитать в
@Override
public void prepareRun(BatchSinkContext context) {
чем-то вроде:
String token =
Objects.requireNonNull(
context.getArguments().get("token"),
"Argument Setter has failed in initializing the \"token\" argument.");
HTTPSinkConfig.setToken(token);