为什么presto timestamp/decimal(38,18)数据类型返回的是字符串(用u“”括起来),而不是python datetime/numeric类型?
普雷斯托jdbc:
从hive.x.y中选择typeof(col1)、typeof(col2)、typeof(col3)、typeof(col4)、typeof(col5)、typeof(col6)
结果是
timestamp timestamp bigint decimal(38,18)varchar varchar
desc hive.x.y
# result is
for_dt timestamp NO NO NO NO 1
for_d timestamp NO NO NO NO 2
for_h bigint NO NO NO NO 3
value decimal(38,18) NO NO NO NO 4
metric varchar(2147483647) NO NO NO NO 5
lat_lon varchar(2147483647) NO NO NO NO 6
attempt 1
# python
from sqlalchemy.engine import create_engine
engine = create_engine('presto://u:p@host:port',connect_args={'protocol': 'https', 'requests_kwargs': {'verify': 'mypem'}})
result = engine.execute('select * from hive.x.y limit 1')
print(result.fetchall())
# result is
[(u'2010-02-18 03:00:00.000', u'2010-02-18 00:00:00.000', 3, u'-0.191912651062011660', u'hey', u'there')]
attempt 2
# python
from pyhive import presto
import requests
from requests.auth import HTTPBasicAuth
req_kw = {
'verify': 'mypem',
'auth': HTTPBasicAuth('u', 'p')
}
cursor = presto.connect(
host='host',
port=port,
protocol='https',
username='u',
requests_kwargs=req_kw,
).cursor()
query = '''select * from x.y limit 1'''
cursor.execute(query)
print cursor.fetchall()
# result is
[(u'2010-02-18 03:00:00.000', u'2010-02-18 00:00:00.000', 3, u'-0.191912651062011660', u'hey', u'there')]
1条答案
按热度按时间vsikbqxv1#
从sql查询得到的输出来自该格式的数据库。
你有两个选择
自己Map数据(编写自己的orm)
学习使用orm
方案1
注意,我刚刚硬编码了您的查询结果在这里进行测试。
选项2使用反射-它查询数据库元数据中的字段类型,这样就不必在选项1中做所有的事情。