Сбор данных с Google Sheets для аналитики в ETL-редакторе Analytic Workspace с помощью Python

С развитием облачных сервисов хранения данных, Google Spreadsheet становится все более популярным и заменяет Excel. Google Spreadsheet предоставляет ролевой доступ, возможность совместной работы, макросы и настраиваемую бизнес-логику, но не позволяет локального хранения данных.

В AnalyticWorkspace, начиная с версии 1.14, внедрен редактор ETL-процессов и возможность добавления виртуальных (расчетных) таблиц. Это дает возможность сбора данных с Google Spreadsheet на локальные серверы и объединения их с данными из других таблиц для последующей аналитики. Это был наш первый шаг к реализации self-service ETL, давший BI-разработчикам больше свободы для работы и анализа данных, который получил свое развитие в более поздних версиях AW BI.

Рассмотрим практический пример переноса данных из Google Sheets в расчетную таблицу AW BI. В качестве источника данных используем таблицу ФХД — Google Таблицы, доступную для чтения по ссылке.
Подготовка структуры данных
Первым шагом создаем модель данных и вычисляемую таблицу в ней:

Вычисляемая или виртуальная таблица — это объект, структуру которого можно динамично создавать и содержимое наполнять, и живет этот объект только во время работы ETL-процесса в Spark сессии.

Проанализируем структуру источника и разметим будущее соответствие полей.

Описываем структуру данных в вычисляемой таблице

Вручную задаем коды полей, прописывая значение для «name» — это будут коды в данном источнике, псевдонимы зададим отдельно через редактор.
Исходя из структуры Google-таблицы видно, что числовые значения — с плавающей точкой, поэтому подойдет FloatType. «Год» — целочисленный IntegerType, «Месяц» и «Подразделение» строки StringType.

Соответствие типов в системе и типам в редакторе структуры вычисляемой таблицы:

  • Число (целое): ByteType, ShortType, IntegerType, LongType;
  • Число (дробное): FloatTpe, DoubleType, DecimalType;
  • Дата: TimestampType, DateType;
  • Логическое: BooleanType;
  • Строка: StringType, и др.

Необходимо обязательно перечислить требуемые типы в первой строке через запятую.
Проверяем, сохраняем.
Используя in-line редактор задаем красивые псевдонимы для полей.

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

  • В начале скрипта задать значение переменной с ссылкой на Google-таблицу (важно чтобы таблица была открыта на чтение);
  • В конце скрипта задать соответствие полей модели и Google-таблицы.

Важно!
Наименование метода должно содержать в себе имя модели. Его можно увидеть в описании модели*
Создание, отладка и публикация скрипта
Ниже приведен соответствующий код. Понадобятся библиотеки для работы с запросами, регулярными выражениями, а также для работы со Spark-объектами.
Проверить промежуточные результаты работы, почитать логи, поймать ошибки можно во время запуска на тестовых данных.

Разбросанные по коду вызовы «print» дают следующий результат во время тестовых прогонов скрипта, позволяя проводить удаленную отладку.

Когда все готово, для возможности запуска скрипта во время загрузки данных, скрипт необходимо опубликовать.
Запуск скрипта
Для загрузки данных из web-сервиса в виде файла .csv в вычисляемую таблицу и дальнейшего их перемещения в аналитическое хранилище необходимо нажать кнопку «Загрузить данные в хранилище». За ходом работы программного обеспечения для сбора и обработки данных можно следить в сервисе Apache Airflow по нажатию соответствующей кнопки в правой верхней части экрана.
Будет осуществлен авторизованный переход в Apache Airflow и доступна панель с информацией о выполнении автоматически сгенерированного DAG-а.

Там же можно увидеть отладочные логи во время «боевого выполнения».

Напомним, что эти данные можно объединять с другими источниками, файлами, СУБД, у вычисляемых таблиц доступны все привычные функции.

Дальнейшее создание виджета затруднений не вызовет.

Заключение
Разумеется, API у Google Spreadsheet гораздо шире. Однако описанного выше метода более чем достаточно для быстрого сбора и качественного анализа данных на платформе Analytic Workspace. Всякий раз при запуске будет выгружаться актуальный набор данных.