presto-python-client icon indicating copy to clipboard operation
presto-python-client copied to clipboard

Cannot create table

Open wayjjpku opened this issue 5 years ago • 5 comments

At first, i ran the code as showed below, it's ok, but with warnings:

C:\Users\xxxx\AppData\Roaming\Python\Python36\site-packages\urllib3\connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)**


import prestodb
conn =  prestodb.dbapi.connect(
    host='172.29.XX.XXX',
    port=1000,
    user='[email protected]',
    catalog='hive',
    http_scheme='https',
    auth=prestodb.auth.BasicAuthentication(username="[email protected]",password="AAA"),

   #isolation_level=prestodb.transaction.IsolationLevel.
)
cur = conn.cursor()
cur.execute(""" select *  from  tmp_qiyejinrong.cs201901701_345""")
rows = cur.fetchall()
column_names = [desc[0] for desc in cur.description]
df = pd.DataFrame(rows, columns = column_names)

but when i run the code using create table or drop table , it comes out nothing!!!:

import prestodb

conn =  prestodb.dbapi.connect(
    host='172.29.XX.XXX',
    port=1000,
    user='[email protected]',
    catalog='hive',
    http_scheme='https',
    auth=prestodb.auth.BasicAuthentication(username="[email protected]",password="AAA"),
    #isolation_level=prestodb.transaction.IsolationLevel.
)

cur = conn.cursor()
cur.execute("""CREATE TABLE tmp_qiyejinrong.cs20190701_2 as  select *  from 
ods_zhugexh_bdpms.t_info_user_property cusattr""")

output: <prestodb.client.PrestoResult at 0x4a23358>

cur.execute("""desc tmp_qiyejinrong.cs20190701_2""")

output: <prestodb.client.PrestoResult at 0x4a1a898>

cur.fetchone()

output:

PrestoUserError: PrestoUserError(type=USER_ERROR, name=SYNTAX_ERROR, message="line 1:1: Table 'hive.tmp_qiyejinrong.cs20190701_2' does not exist", query_id=20190701_081811_04498_hhbkj)

by the way, i modify the code only to let verify=False, when the presto platform receive code not like 'select' ,the presto system will use hive to execute the code such as create table or drop table in my company.

wayjjpku avatar Jul 01 '19 08:07 wayjjpku

You need to call cur.fetchone() after executing the CREATE TABLE statement.

ggreg avatar Aug 21 '19 21:08 ggreg

The SSL warnings is unrelated to your issue.

ggreg avatar Aug 21 '19 21:08 ggreg

Did you expect CREATE TABLE to be executed synchronously (see also #58) or was cur.fetchonne() only missing?

ggreg avatar Aug 21 '19 21:08 ggreg

It should execute the CREATE TABLE synchronously like other database modules. currently cur.fetchone() has to be given as a workaround to run the create table statement or any other insert statements.

subbareddydagumati avatar Jul 26 '20 17:07 subbareddydagumati

I agree with @subbareddydagumati in that other DB API implementations do not require cur.fetchonne() in order to execute statements. The folks over at Trino recently fixed this exact same issue here: https://github.com/trinodb/trino-python-client/pull/220

Could something similar be implemented in the Presto client?

alexandermalyga avatar Oct 20 '22 20:10 alexandermalyga