BIGQUERY - Как установить соединение с Pentaho Data Integration (Spoon)?

Я пытаюсь получить доступ к BigQuery через Pentaho Data Integration, но мне это не удается.

  • Метод аутентификации Google BigQuery: учетная запись службы с ключом .p12
  • Я загрузил и распаковал "зависимости для чайника.zip" в PDI_FOLDER / libswt / osx64

Я следовал этому руководству и использую OSX http://wiki.pentaho.com/display/EAI/Google+BigQuery

Вот что я сделал:

  1. Я загрузил и скопировал bqjdbc-1.4-standalone.jar в PDI_FOLDER / lib
  2. После этого я попытался создать новое соединение в интеграции данных, используя Новое> Подключение к базе данных> Общая база данных> Собственная (JDBC).
  3. Пользовательский URL-адрес подключения: jdbc:BQDriver:projectid(secretproject)?withServiceAccount=true

Я настроил соединение с этими параметрами, следуя этому руководству https://code.google.com/p/starschema-bigquery-jdbc/wiki/JDBCURL. Итак, параметры следующие:

  • Пользовательское имя класса драйвера: net.starschema.clouddb.jdbc.BQDrive
  • Имя пользователя: [email protected]
  • Пароль: /Users/luisfsns/Dropbox/Lendico/etl/marketing/lendico-pentaho-data-integration-googlebigquery.p12.
  • Правильно ли имя моего настраиваемого URL-адреса подключения? Что я должен указать в качестве аргумента projectid? Название проекта или URL-адрес пути? Может кто-нибудь привести мне пример?

Вещи, которых я не знаю:

  • Должен ли я использовать какой-либо другой метод аутентификации (несмотря на «Учетную запись службы») или любой другой тип закрытого ключа, например .json?
  • Правильно ли имя моего пользовательского класса драйвера?
  • Ответ на этот вопрос может вас не порадовать, но поехали. Это соединение можно создать, но извлечение ошибочно и с очень медленным потоком строк (Bigquery быстро обрабатывает что угодно, но этот JDBC делает выборку данных очень медленной.

Кто-нибудь может мне помочь?

Это журнал, когда я пытался проверить созданное соединение:

Ошибка подключения к базе данных [Teste]: org.pentaho.di.core.exception.KettleDatabaseException: Ошибка при попытке подключения к базе данных

Не удалось найти класс драйвера net.starschema.clouddb.jdbc.BQDrive, убедитесь, что установлен драйвер «Общая база данных» (файл jar). net.starschema.clouddb.jdbc.BQDrive

org.pentaho.di.core.exception.KettleDatabaseException: произошла ошибка при попытке подключиться к базе данных

Не удалось найти класс драйвера net.starschema.clouddb.jdbc.BQDrive, убедитесь, что установлен драйвер «Общая база данных» (файл jar). net.starschema.clouddb.jdbc.BQDrive

в org.pentaho.di.core.database.Database.connectUsingClass (Database.java:522) в org.pentaho.di.core.database.Database.connectUsingClass (Database.java:4697) в org.pentaho.di.core .database.Database.normalConnect (Database.java:414) ... еще 70 Вызвано: java.lang.ClassNotFoundException: net.starschema.clouddb.jdbc.BQDrive в java.net.URLClassLoader $ 1.run (URLClassLoader.java: 202) в java.security.AccessController.doPrivileged (собственный метод) в java.net.URLClassLoader.findClass (URLClassLoader.java:190) в java.lang.ClassLoader.loadClass (ClassLoader.java:306) в java.lang.ClassLoader .loadClass (ClassLoader.java:247) в org.pentaho.di.core.database.Database.connectUsingClass (Database.java:497) ... еще 72

Пользовательский URL:
jdbc: BQDriver: projectid (secretproject)? WithServiceAccount = true Пользовательский класс драйвера: net.starschema.clouddb.jdbc.BQDrive

Система: OSX El Capitan


person luisfsns    schedule 14.01.2016    source источник


Ответы (2)


Я сделал здесь сценарий Python 2.7 для извлечения запроса в таблицу и извлечения таблицы в файл csv в Google Cloud Storage, а затем загрузил файл.

Это действительно быстро, и у вас не будет много ошибок.

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

Код SH: (используйте в записи сценария оболочки в вашем JOB)

Скрипт python: (создать таблицу с результатами запроса, экспортировать таблицу в CSV и удалить таблицу)

#!/bin/bash
export PATH=${PATH}

# BOTO is the login manager for GsUtil
export BOTO_DISPLAYENV="/home/mromano/.boto"
export BOTO_CONFIG="/home/mromano/.boto"

rm /tmp/bigquery_extraction_*

#Run Big Query extraction script on python
python "$caminho/google_bigquery_extract_foo_bar.py"

#Give it some seconds to sync data to Google Cloud Storage
sleep 10

#Copy from Google Cloud Storage to local file
/usr/local/bin/gsutil -q cp gs://pentaho_exports/google_bigquery_extract_foo_bar.csv.gz /tmp/google_bigquery_extract_foo_bar.csv.gz

Надеюсь, это помогло. знак равно

import httplib2
import logging
logging.basicConfig()

from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials
from bigquery import get_client

# BigQuery project id as listed in the Google Developers Console.
project_id = 'ce______?_____8'

# Service account email address as listed in the Google Developers Console.
service_account = '[email protected]'

f = file('../../../../keys/bigquery_key.p12', 'rb')
key = f.read()
f.close()

credentials = SignedJwtAssertionCredentials(
    service_account,
    key,
    scope='https://www.googleapis.com/auth/bigquery')

http = httplib2.Http()
http = credentials.authorize(http)


client = get_client(project_id, credentials=credentials, service_account=service_account)

# Write to table
job = client.write_to_table("""SELECT * FROM 001234.TEST""",
                    'pentaho_export',
                  table='table_foo_bar',
                create_disposition='CREATE_IF_NEEDED',
                write_disposition='WRITE_TRUNCATE')
try:
    job_resource = client.wait_for_job(job, timeout=6000)
    #print job_resource
except BigQueryTimeoutException:
    print "Timeout"

# Exporting
job_export = client.export_data_to_uris( ['gs://pentaho_exports/foo_bar.csv.gz'],
                                   'pentaho_export',
                                   'table_foo_bar',
                   compression='GZIP',
                   field_delimiter='    ')
try:
    job_resource = client.wait_for_job(job_export, timeout=6000)
    #print job_resource
except BigQueryTimeoutException:
    print "Timeout"

# Delete an existing table.
deleted = client.delete_table('pentaho_export', 'table_foo_bar')

Убедитесь, что вы сделали следующее.

person MrMauricioLeite    schedule 18.01.2016
comment
в org.pentaho.di.core.database.Database.normalConnect (Database.java:428) в org.pentaho.di.core.database.Database.connect (Database.java:358) в org.pentaho.di.core .database.Database.connect (Database.java:311) в org.pentaho.di.core.database.Database.connect (Database.java:301) в org.pentaho.di.core.database.DatabaseFactory.getConnectionTestReport (DatabaseFactory .java: 80) на org.pentaho.di.core.database.DatabaseMeta.testConnection (DatabaseMeta.java:2686) на org.pentaho.ui.database.event.DataHandler.testDatabaseConnection (DataHandler.java:546) на вс. Reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingImethod.java.invoke (DelegatingMethod.java.invoke) (DelegatingMethod.java.invoke. Method.java:597) на org.pentaho.ui.xul.impl.AbstractXulDomContainer.invoke (AbstractXulDomContainer.java:313) на org.pentah o.ui.xul.impl.AbstractXulComponent.invoke (AbstractXulComponent.java:157) на org.pentaho.ui.xul.impl.AbstractXulComponent.invoke (AbstractXulComponent.java:141) на org.pentaho.ui.xul.swt. tags.SwtButton.access $ 500 (SwtButton.java:43) в org.pentaho.ui.xul.swt.tags.SwtButton $ 4.widgetSelected (SwtButton.java:138) в org.eclipse.swt.widgets.TypedListener.handleEvent ( Неизвестный источник) на org.eclipse.swt.widgets.EventTable.sendEvent (Неизвестный источник) на org.eclipse.swt.widgets.Display.sendEvent (Неизвестный источник) на org.eclipse.swt.widgets.Widget.sendEvent (Неизвестный источник ) в org.eclipse.swt.widgets.Widget.sendEvent (Неизвестный источник) в org.eclipse.swt.widgets.Widget.sendEvent (Неизвестный источник) в org.eclipse.swt.widgets.Widget.notifyListeners (Неизвестный источник) в org.eclipse.swt.widgets.Display.runDeferredEvents (Неизвестный источник) в org.eclipse.swt.widgets.Display.readAndDispatch (Неизвестный источник) в org.eclipse.jface.window.Window.runEventLoop (Window .java: 820) на org.eclipse.jface.window.Window.open (Window.java:796) на org.pentaho.ui.xul.swt.tags.SwtDialog.show (SwtDialog.java:389) на org. pentaho.ui.xul.swt.tags.SwtDialog.show (SwtDialog.java:318) на org.pentaho.di.ui.core.database.dialog.XulDatabaseDialog.open (XulDatabaseDialog.java:116) на org.pentaho. di.ui.core.database.dialog.DatabaseDialog.open (DatabaseDialog.java:59) на org.pentaho.di.ui.spoon.delegates.SpoonDBDelegate.newConnection (SpoonDBDelegate.java:464) на org.pentaho.di. ui.spoon.delegates. SpoonDBDelegate.newConnection (SpoonDBDelegate.java:451) на org.pentaho.di.ui.spoon.Spoon.newConnection (Spoon.java:8728) на sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод). invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в org.penta.penta. .AbstractXulDomContainer.invoke (AbstractXulDomContainer.java:313) в org.pentaho.ui.xul.impl.AbstractXulComponent.invoke (AbstractXulComponent.java:157) на org.pentaho.ui.xul.impl.AbstractXul : 141) на org.pentaho.ui.xul.jface.tags.JfaceMenuitem.access $ 100 (JfaceMenuitem.java:43) на org.pentaho.ui.xul.jface.tags.JfaceMenuitem $ 1.run (JfaceMenuitem.java:106 ) в org.eclipse.jface.action.Action.runWithEvent (Action.java:498) в org.eclipse.jface.action.ActionContributio nItem.handleWidgetSelection (ActionContributionItem.java:545) в org.eclipse.jface.action.ActionContributionItem.access $ 2 (ActionContributionItem.java:490) в org.eclipse.jface.action.ActionContributionItem $ 5.handleEvent (ActionContributionItem ).java:40 в org.eclipse.swt.widgets.EventTable.sendEvent (Неизвестный источник) в org.eclipse.swt.widgets.Display.sendEvent (Неизвестный источник) в org.eclipse.swt.widgets.Widget.sendEvent (Неизвестный источник) в org .eclipse.swt.widgets.Widget.sendEvent (Неизвестный источник) в org.eclipse.swt.widgets.Widget.sendEvent (Неизвестный источник) в org.eclipse.swt.widgets.Widget.notifyListeners (Неизвестный источник) в org.eclipse .swt.widgets.Display.runDeferredEvents (Неизвестный источник) в org.eclipse.swt.widgets.Display.readAndDispatch (Неизвестный источник) в org.pentaho.di.ui.spoon.Spoon.readAndDispatch (Spoon.java:1319) в org.pentaho.di.ui.spoon.Spoon.waitForDispose (Spoon.java:7939) в org.pentaho.di.ui.spoon.Spoon.start (Spoon.ja va: 9190) на org.pentaho.di.ui.spoon.Spoon.main (Spoon.java:654) на sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) на sun.reflect.NativeMethodAccessorImpl.invoke (NativeImethodAccess 39) на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) на java.lang.reflect.Method.invoke (Method.java:597) на org.pentaho.commons.launcher.Launcher.java (Launcher.java : 92) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect. NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) по адресу sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) по адресу java.lang.reflect.Method.java.Runcher.Method.java: (LaunchRunner.java:116) в apple.launcher.LaunchRunner.callMain (LaunchRunner.java:51) в apple.launcher.JavaApplicationLauncher.launch (JavaApplicationLauncher.java:52) Вызвано: org.pentaho.di.core.exception. KettleDatabaseException: класс драйвера net.starschema.clouddb.jdbc.BQDrive не найден, убедитесь, что установлен драйвер «Общая база данных» (файл jar). net.starschema.clouddb.jdbc.BQDrive - person Yuval Herziger; 22.01.2016

Вы заявили,

  • +1 за находчивость. Обычная вещь в PDI, если у вас есть что-то, что сервер может делать лучше (то есть быстрее), чем JDBC из PDI, используйте сценарий оболочки, запишите его в текстовый файл, а затем сделайте свое дело с PDI.
  • jdbc:BQDriver:themetic-scope-114043?withServiceAccount=true, где themetic-scope-114043 - идентификатор вашего проекта. (используйте свой правильный идентификатор)

    Неверное имя пользовательского класса драйвера (пропущенная буква в конце)

  • net.starschema.clouddb.jdbc.BQDriver

    Пароль должен правильно указывать на файл .p12. На моем компьютере с Windows я использовал C: \ Digin-f537871c3b66.p12 в качестве пароля, а физический файл должен находиться по указанному пути.

  • # P2 #

    # P3 #
    # P4 #

person Marlon Abeykoon    schedule 01.03.2016