`CREATE TABLE test (x Int32, y Int32, s String, PRIMARY KEY (x, y)) ENGINE = MergeTree;`
should be equivalent to
`CREATE TABLE test (x Int32, y Int32, s String) ENGINE = MergeTree PRIMARY KEY (x, y);`
engine_args.emplace_back(std::move(path_arg));
            engine_args.emplace_back(std::move(name_arg));
            std::move(std::begin(old_args), std::end(old_args), std::back_inserter(engine_args));
            arg_num = 2;
            arg_cnt += 2;
        }
        else
            throw Exception("Expected two string literal arguments: zookeper_path and replica_name", ErrorCodes::BAD_ARGUMENTS);
        
        bool is_on_cluster = args.local_context.getClientInfo().query_kind == ClientInfo::QueryKind::SECONDARY_QUERY;
        bool allow_uuid_macro = is_on_cluster || args.query.attach;
        
        
        if (!args.attach)
        {
            Macros::MacroExpansionInfo info;
            
            info.expand_special_macros_only = true;
            info.table_id = args.table_id;
            if (!allow_uuid_macro)
                info.table_id.uuid = UUIDHelpers::Nil;
            zookeeper_path = args.context.getMacros()->expand(zookeeper_path, info);
            info.level = 0;
            info.table_id.uuid = UUIDHelpers::Nil;
            replica_name = args.context.getMacros()->expand(replica_name, info);
        }
        ast_zk_path->value = zookeeper_path;
        ast_replica_name->value = replica_name;