很多已经入坑了数据挖掘工程师和数据分析师的人,基本上都会接触到mysql、SqlServer、hive、impala以及phoenix等等各种各样的数据库。
作为数据挖掘工程师和数据分析师而言,我们不需要精通数据库环境的搭建,数据库的性能优化,但我们需要掌握如何使用查询。
如果你选择一门语言来做数据分析、数据挖掘的工具,那么这门语言如何连接对应的数据库显得尤为重要。因为进行复杂的数据分析,我们不可能只用一条查询语句解决,我们需要将查询的结果在进行数据清洗等等一系列的操作转换,数据才能打到我们的要求。
下面是python连接impala和phoenix数据库的方式
安装
# 需要提前安装好java环境,最好重启一遍
pip install jaydebeapi
连接impala和phoenix的基类
import jaydebeapi
class JdbcConnectDatabase():
def __init__(self, conn_url, user, pwd, driver, jar_addr):
self.conn = jaydebeapi.connect(driver, conn_url, [user, pwd], jar_addr)
def query(self, sql):
with self.conn.cursor() as cursor:
cursor.execute(sql)
cols = cursor.description
col = []
for i in cols:
col.append(i[0])
print(col)
return col,cursor.fetchall()
# 我们一般只有select权限,可忽略
def commit_sql(self, sql):
with self.conn.cursor() as cursor:
cursor.execute(sql)
self.conn.commit()
def close(self):
self.conn.close()
连接impala
# 需要的jar包自行下载,以下是我连接需要用到的jar包
IMPALA_JAR = 'impalajdbc\commons-logging-1.1.1.jar;' \
'impalajdbc\hive_metastore.jar;' \
'impalajdbc\hive_service.jar;' \
'impalajdbc\httpclient-4.1.3.jar;' \
'impalajdbc\httpcore-4.1.3.jar;' \
'impalajdbc\ImpalaJDBC41.jar;' \
'impalajdbc\libfb303-0.9.0.jar;' \
'impalajdbc\libthrift-0.9.0.jar;' \
'impalajdbc\log4j-1.2.14.jar;' \
'impalajdbc\ql.jar;' \
'impalajdbc\slf4j-api-1.5.11.jar;' \
'impalajdbc\slf4j-log4j12-1.5.11.jar;' \
'impalajdbc\TCLIServiceClient.jar;' \
'impalajdbc\zookeeper-3.4.6.jar;'
# request_pool=dev12更改为给你们划分的资源池,jks文件在签审平台下载
conn_url = 'jdbc:impala://ip地址:端口号/数据库名称;AuthMech=3;ssl=1;sslTrustStore=xxx.jks的配置文件路径;request_pool=dev12'
def get_impala_client(user='', password=''):
return ImpalaClient(
conn_url=_conn_url,
user=user,
pwd=password,
driver='com.cloudera.impala.jdbc41.Driver',
jar_addr=IMPALA_JAR
)
连接phoenix
# 自行修改本地jar包的位置
PHOENIX_JAR = 'phoenixjdbc\phoenix-5.0.0-HBase-2.0-client.jar;' \
'phoenixjdbc\phoenix-5.0.0-HBase-2.0-thin-client.jar;' \
'phoenixjdbc\phoenix-core-5.0.0-HBase-2.0.jar'
class PhoenixClient(JdbcConnectDatabase):
def __init__(self, conn_url, user, pwd, driver, jar_addr):
super().__init__(conn_url, user, pwd, driver, jar_addr)
gmbs_phoenix_url = 'jdbc:phoenix:ip地址,ip地址:端口号'
def get_phoenix_client(user='', password=''):
return PhoenixClient(gmbs_phoenix_url, user, password,
'org.apache.phoenix.jdbc.PhoenixDriver', PHOENIX_JAR)