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