def _query_column_profile(self, column_names, query):
"""Common code shared by PostgreSQL/MySQL/Oracle/MSSQL profilers
to collect column profiles of the table.
Args:
column_names(list): column names.
query(str): a query string to be executed on each database.
Returns:
tuple: (num_rows, minmax, nulls)
minmax and nulls are dictionaries having column names as
the keys.
"""
_minmax = {}
_nulls = {}
num_rows = None
try:
rs = self.dbdriver.q2rs(query)
assert len(rs.resultset) == 1
a = copy.copy(list(rs.resultset[0]))
num_rows = a.pop(0)
log.trace("_query_column_profile: rows %d" % num_rows)
i = 0
while len(a) > 0:
nulls = a.pop(0)
colmin = a.pop(0)
colmax = a.pop(0)
log.trace(("_query_column_profile: col %s %d %s %s" %
(column_names[i], nulls, colmin, colmax)))
_minmax[column_names[i]] = [colmin, colmax]
_nulls[column_names[i]] = nulls
i += 1
except QueryError as e:
log.error(_("Could not get row count/num of "
"nulls/min/max values."),
detail=e.value, query=query)
raise e
log.trace("_query_column_profile: %s" % str(_minmax))
return (num_rows, _minmax, _nulls)
评论列表
文章目录