def does_period_have_data(inst, db, ssl, table, start_dt, stop_dt): assert start_dt is None or isinstance(start_dt, datetime.datetime) assert stop_dt is None or isinstance(stop_dt, datetime.datetime) if start_dt is None or stop_dt is None: ymd_filter = '' else: ymd_filter = tools.get_ymd_filter(tools.dt_to_iso8601(start_dt), tools.dt_to_iso8601(stop_dt)) ssl_opt = tools.format_ssl(ssl) sql = """ SELECT 'found-data' FROM {tab} c WHERE 1 = 1 {filter} LIMIT 1 """.format(tab=table, filter=ymd_filter) sql = ' '.join(sql.split()) cmd = """ impala-shell -i {inst} -d {db} --quiet -B {ssl} -q "{sql}" | columns | cut -f 1 """.format(inst=inst, db=db, ssl=ssl_opt, sql=sql) r = envoy.run(cmd) if r.status_code != 0: print(cmd) print(r.std_err) print(r.std_out) tools.abort("Error: does_period_have_data() failed!") else: if 'found-data' in r.std_out.strip(): return True else: return False
def validate_args(args): if not args.inst: tools.abort("Error: instance not provided as arg or env var") if not args.db: tools.abort("Error: database not provided as arg or env var") if not args.table: tools.abort("Error: table not provided as arg or env var") if args.mode not in ('incremental', 'full', 'auto'): tools.abort("Error: mode value is invalid: %s" % args.mode) if args.data_start_ts_prior and not tools.valid_iso8601(args.data_start_ts_prior, 'basic'): tools.abort("Error: invalid timestamp: %s" % args.data_start_ts_prior) if args.data_stop_ts_prior and not tools.valid_iso8601(args.data_stop_ts_prior, 'basic'): tools.abort("Error: invalid timestamp: %s" % args.data_stop_ts_prior) return args