Repository: incubator-hawq Updated Branches: refs/heads/master dc12e94b4 -> 5a152dcdd
HAWQ-1033. Fix bug in hawq register --force. Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/5a152dcd Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/5a152dcd Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/5a152dcd Branch: refs/heads/master Commit: 5a152dcdde62321504de468706e45d7131ebf41e Parents: dc12e94 Author: hzhang2 <zhanghuan...@163.com> Authored: Fri Sep 23 09:51:03 2016 +0800 Committer: hzhang2 <zhanghuan...@163.com> Committed: Fri Sep 23 09:51:03 2016 +0800 ---------------------------------------------------------------------- tools/bin/hawqregister | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/5a152dcd/tools/bin/hawqregister ---------------------------------------------------------------------- diff --git a/tools/bin/hawqregister b/tools/bin/hawqregister index 09b8532..2e945a6 100755 --- a/tools/bin/hawqregister +++ b/tools/bin/hawqregister @@ -58,7 +58,7 @@ def option_parser(): return parser -def register_yaml_dict_check(D): +def register_yaml_dict_check(D, table_column_num, src_tablename): '''check exists''' check_list = ['DFS_URL', 'Distribution_Policy', 'FileFormat', 'TableName', 'Bucketnum'] for attr in check_list: @@ -111,6 +111,13 @@ def register_yaml_dict_check(D): if not D['AO_FileLocations'].has_key(attr): logger.error('Wrong configuration yaml file format: "%s" attribute does not exist.\n See example in "hawq register --help".' % 'AO_FileLocations.%s' % attr) sys.exit(1) + if D['FileFormat'].lower() == 'parquet': + yml_column_num = len(D['Parquet_Schema']) + else: + yml_column_num = len(D['AO_Schema']) + if table_column_num != yml_column_num and table_column_num > 0: + logger.error('Column number of table in yaml file is not equals to the column number of table %s.' % src_tablename) + sys.exit(1) class FailureHandler(object): @@ -168,6 +175,10 @@ class GpRegisterAccessor(object): def get_table_existed(self, tablename): qry = """select count(*) from pg_class where relname = '%s';""" % tablename.split('.')[-1].lower() return self.exec_query(qry)[0]['count'] == 1 + + def get_table_column_num(self, tablename): + qry = """select count(*) from pg_attribute ,pg_class where pg_class.relname = '%s' and pg_class.oid = pg_attribute.attrelid and attnum > 0;""" % tablename.split('.')[-1].lower() + return self.exec_query(qry)[0]['count'] def do_create_table(self, src_table_name, tablename, schema_info, fmt, distrbution_policy, file_locations, bucket_number, partitionby, partitions_constraint, partitions_name): if self.get_table_existed(tablename): @@ -395,7 +406,8 @@ class HawqRegister(object): import yaml with open(yml_file, 'r') as f: params = yaml.load(f) - register_yaml_dict_check(params) + table_column_num = self.accessor.get_table_column_num(self.tablename) + register_yaml_dict_check(params, table_column_num, self.tablename) partitions_filepaths = [] partitions_filesizes = [] partitions_constraint = [] @@ -469,8 +481,8 @@ class HawqRegister(object): self.filepath = self.files[0][:self.files[0].rfind('/')] if self.files else '' check_file_not_folder() check_database_encoding() - if self.mode != 'force' and self.mode != 'repair': - if not create_table(): + if self.mode != 'repair': + if not create_table() and self.mode != 'force': self.mode = 'usage2_table_exist' check_bucket_number() check_distribution_policy() @@ -600,7 +612,7 @@ class HawqRegister(object): if len(lineargs) == 8 and lineargs[0].find("d") == -1: files.append(lineargs[7]) sizes.append(int(lineargs[4])) - if len(files) == 0: + if len(files) == 0 and self.mode != 'force': logger.error("Dir '%s' is empty" % filepath) sys.exit(1) return files, sizes