Cloudera Impala INVALIDATE METADATA 表列表
Cloudera Impala INVALIDATE METADATA list of tables
我正在使用 pandas 和 pyodbc 从 CDH6 Impala 中提取数据。 table 每天和每隔一天摄取一次,我需要进入并手动使几个 table 上的元数据无效。我一直在尝试使用 Python 自动执行此操作,让代码遍历列表中的每个 table。但是由于我们用语句检索了一个 None 类型的对象,所以迭代不起作用。
有什么想法吗?
import pyodbc
import pandas as pd
connString = 'connection string'
tables = ["INVALIDATE METADATA master.table1", "INVALIDATE METADATA master.table2" etc]
for t in tables:
if tables != None:
try:
pd.read_sql_query(tables, con=pyodbc.connect(connString, autocommit=True))
except:
print('Unsuccessful')
else:
if tables is None:
pd.read_sql_query(tables, con=pyodbc.connect(connString, autocommit=True))
print('Success with none')
我认为您可以轻松地实现自动化。我更喜欢使用 pyodbc。
- 首先使用
show tables in schema
获取表格列表。
- 遍历列表,创建无效元数据语句并发出它。
import pyodbc
connp = pyodbc.connect(conn_string, autocommit=True)
cursor = connp.cursor()
#Create SQL to fetch all tables from schema_xx. You can use argument instead of schema_xx too.
sql = "show tables in schema_xx"
cursor.execute(sql)
for row in cursor.fetchall():
#Create and execute invalidate metadata statement one by one
sql ="INVALIDATE METADATA schema_xx."+row[0]
cursor.execute(sql)
connp.close()
您不需要迭代所有表。对于当前架构; “使元数据无效”语句使该架构上所有表的元数据无效。
我正在使用 pandas 和 pyodbc 从 CDH6 Impala 中提取数据。 table 每天和每隔一天摄取一次,我需要进入并手动使几个 table 上的元数据无效。我一直在尝试使用 Python 自动执行此操作,让代码遍历列表中的每个 table。但是由于我们用语句检索了一个 None 类型的对象,所以迭代不起作用。
有什么想法吗?
import pyodbc
import pandas as pd
connString = 'connection string'
tables = ["INVALIDATE METADATA master.table1", "INVALIDATE METADATA master.table2" etc]
for t in tables:
if tables != None:
try:
pd.read_sql_query(tables, con=pyodbc.connect(connString, autocommit=True))
except:
print('Unsuccessful')
else:
if tables is None:
pd.read_sql_query(tables, con=pyodbc.connect(connString, autocommit=True))
print('Success with none')
我认为您可以轻松地实现自动化。我更喜欢使用 pyodbc。
- 首先使用
show tables in schema
获取表格列表。 - 遍历列表,创建无效元数据语句并发出它。
import pyodbc
connp = pyodbc.connect(conn_string, autocommit=True)
cursor = connp.cursor()
#Create SQL to fetch all tables from schema_xx. You can use argument instead of schema_xx too.
sql = "show tables in schema_xx"
cursor.execute(sql)
for row in cursor.fetchall():
#Create and execute invalidate metadata statement one by one
sql ="INVALIDATE METADATA schema_xx."+row[0]
cursor.execute(sql)
connp.close()
您不需要迭代所有表。对于当前架构; “使元数据无效”语句使该架构上所有表的元数据无效。