blaze / blaze/odo

Impala table write fails: table does not exist

Open
#535 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
1k
Forks
131
PR merge metrics
No merged PRs in 30d

Description

These work as expected, where dbname.tablename already exists:

odo('impala://localhost/dbname::tablename', pd.DataFrame)
odo('impala://localhost/dbname::tablename', 'ssh://server:file.csv')

But these fail with the same error:

odo(df, 'impala://localhost/dbname::newtable')
odo('impala://localhost/dbname::tablename', 'impala://localhost/dbname::newtable')
resource('impala://localhost/dbname::newtable')

`DBAPIError: (impala.error.HiveServer2Error) AnalysisException: Table does not exist: dbname.newtable
[SQL: 'SELECT * FROM newtable LIMIT 0']`

Am I doing this right? I thought it would create the Impala table if it doesn't already exist. I appreciate any help you can give me. Thanks.

Here's the full traceback. Thanks.

```python
In [8]: resource('impala://localhost/dbname::newtable')
---------------------------------------------------------------------------
HiveServer2Error Traceback (most recent call last)
/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/base.py in _execute_context(self, dialect, constructor, statement, parameters, *args)
1181 parameters,
-> 1182 context)
1183 except BaseException as e:

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/default.py in do_execute(self, cursor, statement, parameters, context)
468 def do_execute(self, cursor, statement, parameters, context=None):
--> 469 cursor.execute(statement, parameters)
470

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in execute(self, operation, parameters, configuration)
247 self.execute_async(operation, parameters=parameters,
--> 248 configuration=configuration)
249 log.debug('Waiting for query to finish')

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in execute_async(self, operation, parameters, configuration)
288
--> 289 self._execute_async(op)
290

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in _execute_async(self, operation_fn)
307 self._debug_log_state()
--> 308 operation_fn()
309 self._last_operation_active = True

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in op()
285 configuration,
--> 286 async=True)
287 self._last_operation = op

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in execute(self, statement, configuration, async)
918 runAsync=async)
--> 919 return self._operation('ExecuteStatement', req)
920

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in _operation(self, kind, request)
848 def _operation(self, kind, request):
--> 849 resp = self._rpc(kind, request)
850 return self._get_operation(resp.operationHandle)

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in _rpc(self, func_name, request)
816 self._log_response(func_name, response)
--> 817 err_if_rpc_not_ok(response)
818 return response

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in err_if_rpc_not_ok(resp)
603 resp.status.statusCode != TStatusCode.STILL_EXECUTING_STATUS):
--> 604 raise HiveServer2Error(resp.status.errorMessage)
605

HiveServer2Error: AnalysisException: Table does not exist: dbname.newtable

The above exception was the direct cause of the following exception:

DBAPIError Traceback (most recent call last)
in ()
----> 1 resource('impala://localhost/dbname::newtable')

/home/pteehan/.local/lib/python3.5/site-packages/odo/regex.py in __call__(self, s, *args, **kwargs)
89
90 def __call__(self, s, *args, **kwargs):
---> 91 return self.dispatch(s)(s, *args, **kwargs)
92
93 @property

/home/pteehan/.local/lib/python3.5/site-packages/odo/resource.py in resource_split(uri, *args, **kwargs)
104 def resource_split(uri, *args, **kwargs):
105 uri, other = uri.rsplit('::', 1)
--> 106 return resource(uri, other, *args, **kwargs)

/home/pteehan/.local/lib/python3.5/site-packages/odo/regex.py in __call__(self, s, *args, **kwargs)
89
90 def __call__(self, s, *args, **kwargs):
---> 91 return self.dispatch(s)(s, *args, **kwargs)
92
93 @property

/home/pteehan/.local/lib/python3.5/site-packages/odo/backends/sql.py in resource_impala(uri, *args, **kwargs)
591 except ImportError:
592 raise ImportError("Please install or update `impyla` library")
--> 593 return resource_sql(uri, *args, **kwargs)
594
595

/home/pteehan/.local/lib/python3.5/site-packages/odo/backends/sql.py in resource_sql(uri, *args, **kwargs)
565 table_name,
566 metadata,
--> 567 autoload_with=engine,
568 ),
569 schema,

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/sql/schema.py in __new__(cls, *args, **kw)
434 except:
435 with util.safe_reraise():
--> 436 metadata._remove_table(name, schema)
437
438 @property

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py in __exit__(self, type_, value, traceback)
58 exc_type, exc_value, exc_tb = self._exc_info
59 self._exc_info = None # remove potential circular references
---> 60 compat.reraise(exc_type, exc_value, exc_tb)
61 else:
62 if not compat.py3k and self._exc_info and self._exc_info[1]:

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/util/compat.py in reraise(tp, value, tb, cause)
184 if value.__traceback__ is not tb:
185 raise value.with_traceback(tb)
--> 186 raise value
187
188 else:

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/sql/schema.py in __new__(cls, *args, **kw)
429 metadata._add_table(name, schema, table)
430 try:
--> 431 table._init(name, metadata, *args, **kw)
432 table.dispatch.after_parent_attach(table, metadata)
433 return table

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/sql/schema.py in _init(self, name, metadata, *args, **kwargs)
505 # circular foreign keys
506 if autoload:
--> 507 self._autoload(metadata, autoload_with, include_columns)
508
509 # initialize all the column, etc. objects. done after reflection to

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/sql/schema.py in _autoload(self, metadata, autoload_with, include_columns, exclude_columns)
517 autoload_with.run_callable(
518 autoload_with.dialect.reflecttable,
--> 519 self, include_columns, exclude_columns
520 )
521 else:

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/base.py in run_callable(self, callable_, *args, **kwargs)
2034 """
2035 with self.contextual_connect() as conn:
-> 2036 return conn.run_callable(callable_, *args, **kwargs)
2037
2038 def execute(self, statement, *multiparams, **params):

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/base.py in run_callable(self, callable_, *args, **kwargs)
1523
1524 """
-> 1525 return callable_(self, *args, **kwargs)
1526
1527 def _run_visitor(self, visitorcallable, element, **kwargs):

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/default.py in reflecttable(self, connection, table, include_columns, exclude_columns)
369 self, connection, table, include_columns, exclude_columns):
370 insp = reflection.Inspector.from_engine(connection)
--> 371 return insp.reflecttable(table, include_columns, exclude_columns)
372
373 def get_pk_constraint(self, conn, table_name, schema=None, **kw):

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/reflection.py in reflecttable(self, table, include_columns, exclude_columns)
588
589 for col_d in self.get_columns(
--> 590 table_name, schema, **table.dialect_kwargs):
591 found_table = True
592

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/reflection.py in get_columns(self, table_name, schema, **kw)
367 col_defs = self.dialect.get_columns(self.bind, table_name, schema,
368 info_cache=self.info_cache,
--> 369 **kw)
370 for col_def in col_defs:
371 # make this easy and only return instances for coltype

/home/pteehan/.local/lib/python3.5/site-packages/impala/sqlalchemy.py in get_columns(self, connection, table_name, schema, **kwargs)
159 name = '%s.%s' % (schema, name)
160 query = 'SELECT * FROM %s LIMIT 0' % name
--> 161 cursor = connection.execute(query)
162 schema = cursor.cursor.description
163 # We need to fetch the empty results otherwise these queries remain in

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/base.py in execute(self, object, *multiparams, **params)
937 """
938 if isinstance(object, util.string_types[0]):
--> 939 return self._execute_text(object, multiparams, params)
940 try:
941 meth = object._execute_on_connection

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/base.py in _execute_text(self, statement, multiparams, params)
1095 statement,
1096 parameters,
-> 1097 statement, parameters
1098 )
1099 if self._has_events or self.engine._has_events:

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/base.py in _execute_context(self, dialect, constructor, statement, parameters, *args)
1187 parameters,
1188 cursor,
-> 1189 context)
1190
1191 if self._has_events or self.engine._has_events:

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/base.py in _handle_dbapi_exception(self, e, statement, parameters, cursor, context)
1391 util.raise_from_cause(
1392 sqlalchemy_exception,
-> 1393 exc_info
1394 )
1395 else:

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/util/compat.py in raise_from_cause(exception, exc_info)
200 exc_type, exc_value, exc_tb = exc_info
201 cause = exc_value if exc_value is not exception else None
--> 202 reraise(type(exception), exception, tb=exc_tb, cause=cause)
203
204 if py3k:

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/util/compat.py in reraise(tp, value, tb, cause)
183 value.__cause__ = cause
184 if value.__traceback__ is not tb:
--> 185 raise value.with_traceback(tb)
186 raise value
187

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/base.py in _execute_context(self, dialect, constructor, statement, parameters, *args)
1180 statement,
1181 parameters,
-> 1182 context)
1183 except BaseException as e:
1184 self._handle_dbapi_exception(

/home/pteehan/.local/lib/python3.5/site-packages/sqlalchemy/engine/default.py in do_execute(self, cursor, statement, parameters, context)
467
468 def do_execute(self, cursor, statement, parameters, context=None):
--> 469 cursor.execute(statement, parameters)
470
471 def do_execute_no_params(self, cursor, statement, context=None):

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in execute(self, operation, parameters, configuration)
246 # PEP 249
247 self.execute_async(operation, parameters=parameters,
--> 248 configuration=configuration)
249 log.debug('Waiting for query to finish')
250 self._wait_to_finish() # make execute synchronous

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in execute_async(self, operation, parameters, configuration)
287 self._last_operation = op
288
--> 289 self._execute_async(op)
290
291 def _debug_log_state(self):

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in _execute_async(self, operation_fn)
306 self._reset_state()
307 self._debug_log_state()
--> 308 operation_fn()
309 self._last_operation_active = True
310 self._debug_log_state()

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in op()
284 op = self.session.execute(self._last_operation_string,
285 configuration,
--> 286 async=True)
287 self._last_operation = op
288

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in execute(self, statement, configuration, async)
917 confOverlay=configuration,
918 runAsync=async)
--> 919 return self._operation('ExecuteStatement', req)
920
921 def get_databases(self, schema='.*'):

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in _operation(self, kind, request)
847
848 def _operation(self, kind, request):
--> 849 resp = self._rpc(kind, request)
850 return self._get_operation(resp.operationHandle)
851

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in _rpc(self, func_name, request)
815 response = self._execute(func_name, request)
816 self._log_response(func_name, response)
--> 817 err_if_rpc_not_ok(response)
818 return response
819

/home/pteehan/.local/lib/python3.5/site-packages/impala/hiveserver2.py in err_if_rpc_not_ok(resp)
602 resp.status.statusCode != TStatusCode.SUCCESS_WITH_INFO_STATUS and
603 resp.status.statusCode != TStatusCode.STILL_EXECUTING_STATUS):
--> 604 raise HiveServer2Error(resp.status.errorMessage)
605
606

DBAPIError: (impala.error.HiveServer2Error) AnalysisException: Table does not exist: dbname.newtable
[SQL: 'SELECT * FROM newtable LIMIT 0']

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.