Несовместимый результат с Sqoop - PullRequest
0 голосов
/ 25 апреля 2019

Использование Sqoop для получения данных из базы данных MySQL приводит к противоречивым результатам, независимо от того, запускается ли он из оболочки или из подпроцесса python. Тем не менее, у меня нет этой проблемы, делающей то же самое при доступе к базе данных Oracle, даже из той же сессии Python.

Следующие команды ожидаются от оболочки:

export username="user1"

URI="jdbc:mysql://$host/dbname"
URI="${URI}?verifyServerCertificate=false"
URI="${URI}&useSSL=true"
URI="${URI}&requireSSL=false"

## List Tables
sqoop list-tables  \
    --connect ${URI} \
    --username ${username} \
    --password-file password.file 

Однако то же самое не запускается из подпроцесса python:

import subprocess

## List Tables
subprocess.Popen(
    'sqoop list-tables --connect jdbc:mysql://$host/dbname?verifyServerCertificate=false&useSSL=true&requireSSL=false --username user1 --password-file password.file',
shell=True)

выдает следующую ошибку:

ERROR [main] manager.CatalogQueryManager (LoggingUtils.java:logAll(43)) - Failed to list tables
java.sql.SQLException: Access denied for user ''@'100.100.100.100' (using password: NO)

Есть ли что-то еще, что мне нужно сделать, чтобы подключиться к базе данных MySQL с помощью Sqoop через подпроцесс python?

1 Ответ

0 голосов
/ 25 апреля 2019

понял это сразу после публикации.Возможно, это может помочь кому-то еще.

Мне нужно было обернуть строку подключения в "".

Ниже приведено более точное представление Python.

import subprocess

with open('lbaDevUsername.file', 'r') as f:
    username = f.read()

URI = "jdbc:mysql://$host/dbname"
URI = "{}?verifyServerCertificate=false".format(URI)
URI = "{}&useSSL=true".format(URI)
URI = "{}&requireSSL=false".format(URI)

## List Tables
subprocess.Popen("""
sqoop list-tables \
--connect "{}" \
--username {} \
--password-file password.file 
""".format(URI, username), shell=True)
...