Search in sources :

Example 1 with HiveTransactionHandle

use of io.prestosql.plugin.hive.HiveTransactionHandle in project hetu-core by openlookeng.

the class SqlStandardAccessControl method hasAdminOptionForRoles.

private boolean hasAdminOptionForRoles(ConnectorTransactionHandle transaction, ConnectorIdentity identity, Set<String> roles) {
    if (isAdmin(transaction, identity)) {
        return true;
    }
    SemiTransactionalHiveMetastore metastore = metastoreProvider.apply(((HiveTransactionHandle) transaction));
    Set<String> rolesWithGrantOption = listApplicableRoles(new HivePrincipal(USER, identity.getUser()), metastore::listRoleGrants).filter(RoleGrant::isGrantable).map(RoleGrant::getRoleName).collect(toSet());
    return rolesWithGrantOption.containsAll(roles);
}
Also used : RoleGrant(io.prestosql.spi.security.RoleGrant) SemiTransactionalHiveMetastore(io.prestosql.plugin.hive.metastore.SemiTransactionalHiveMetastore) HivePrincipal(io.prestosql.plugin.hive.metastore.HivePrincipal) HiveTransactionHandle(io.prestosql.plugin.hive.HiveTransactionHandle)

Example 2 with HiveTransactionHandle

use of io.prestosql.plugin.hive.HiveTransactionHandle in project hetu-core by openlookeng.

the class CarbondataSplitManager method getSplitsForCompaction.

/*
     * Convert the splits into batches based on task id and wrap around ConnectorSplitSource to send back
     */
public ConnectorSplitSource getSplitsForCompaction(HiveIdentity identity, ConnectorTransactionHandle transactionHandle, ConnectorTableHandle tableHandle, String tablePath, Map<String, Object> queryProperties, String queryId, ImmutableList.Builder<ConnectorSplit> allSplitsForComp, Configuration configuration) throws PrestoException {
    HiveTableHandle hiveTable = (HiveTableHandle) tableHandle;
    SchemaTableName schemaTableName = hiveTable.getSchemaTableName();
    List<List<LoadMetadataDetails>> allGroupedSegList;
    // Step 1: Get table handles and metadata
    SemiTransactionalHiveMetastore metaStore = metastoreProvider.apply((HiveTransactionHandle) transactionHandle);
    Table table = metaStore.getTable(identity, schemaTableName.getSchemaName(), schemaTableName.getTableName()).orElseThrow(() -> new TableNotFoundException(schemaTableName));
    Properties hiveSchema = MetastoreUtil.getHiveSchema(table);
    CarbonLoadModel carbonLoadModel = null;
    try {
        carbonLoadModel = HiveCarbonUtil.getCarbonLoadModel(hiveSchema, configuration);
    } catch (Exception e) {
        LOGGER.error("Cannot create carbon load model");
        throw new PrestoException(GENERIC_INTERNAL_ERROR, "Cannot create carbon load model");
    }
    CompactionType compactionType = (queryProperties.get("FULL") == Boolean.valueOf("true")) ? CompactionType.MAJOR : CompactionType.MINOR;
    // Step 2: Get segments to be merged based on configuration passed
    allGroupedSegList = CarbondataHetuCompactorUtil.identifyAndGroupSegmentsToBeMerged(carbonLoadModel, configuration, compactionType, carbondataConfig.getMajorVacuumSegSize(), carbondataConfig.getMinorVacuumSegCount());
    // All the splits are grouped based on taskIds and compaction level into one builder
    ImmutableList.Builder<ConnectorSplit> cSplits = ImmutableList.builder();
    Gson gson = new Gson();
    for (List<LoadMetadataDetails> segmentsToBeMerged : allGroupedSegList) {
        String mergedLoadName = CarbonDataMergerUtil.getMergedLoadName(segmentsToBeMerged);
        // Step 3:  Get all the splits for the required segments and divide them based on task ids
        Map<String, List<CarbondataLocalInputSplit>> taskIdToSplitMapping = new HashMap<>();
        for (ConnectorSplit connectorSplit : allSplitsForComp.build()) {
            HiveSplit currSplit = ((HiveSplitWrapper) connectorSplit).getSplits().get(0);
            CarbondataLocalMultiBlockSplit currSplits = gson.fromJson(currSplit.getSchema().getProperty("carbonSplit"), CarbondataLocalMultiBlockSplit.class);
            for (CarbondataLocalInputSplit split : currSplits.getSplitList()) {
                CarbonInputSplit carbonInputSplit = CarbondataLocalInputSplit.convertSplit(split);
                String taskId = carbonInputSplit.taskId;
                String segmentNo = carbonInputSplit.getSegmentId();
                for (LoadMetadataDetails load : segmentsToBeMerged) {
                    if (load.getLoadName().equals(segmentNo)) {
                        List<CarbondataLocalInputSplit> currList = taskIdToSplitMapping.computeIfAbsent(taskId, k -> new ArrayList<>());
                        currList.add(split);
                    }
                }
            }
        }
        // Step 4: Create the ConnectorSplitSource with the splits divided and return
        long index = 0;
        for (Map.Entry<String, List<CarbondataLocalInputSplit>> splitEntry : taskIdToSplitMapping.entrySet()) {
            CarbondataLocalMultiBlockSplit currSplit = new CarbondataLocalMultiBlockSplit(splitEntry.getValue(), splitEntry.getValue().stream().flatMap(f -> Arrays.stream(getLocations(f))).distinct().toArray(String[]::new));
            index++;
            Properties properties = new Properties();
            for (Map.Entry<String, String> entry : table.getStorage().getSerdeParameters().entrySet()) {
                properties.setProperty(entry.getKey(), entry.getValue());
            }
            // TODO: Use the existing CarbondataLocalInputSplit list to convert
            properties.setProperty("tablePath", tablePath);
            properties.setProperty("carbonSplit", currSplit.getJsonString());
            properties.setProperty("queryId", queryId);
            properties.setProperty("index", String.valueOf(index));
            properties.setProperty("mergeLoadName", mergedLoadName);
            properties.setProperty("compactionType", compactionType.toString());
            properties.setProperty("taskNo", splitEntry.getKey());
            cSplits.add(HiveSplitWrapper.wrap(new HiveSplit(schemaTableName.getSchemaName(), schemaTableName.getTableName(), schemaTableName.getTableName(), tablePath, 0L, 0L, 0L, 0L, properties, new ArrayList(), getHostAddresses(currSplit.getLocations()), OptionalInt.empty(), false, new HashMap<>(), Optional.empty(), false, Optional.empty(), Optional.empty(), false, ImmutableMap.of())));
        }
    }
    LOGGER.info("Splits for compaction built and ready");
    return new FixedSplitSource(cSplits.build());
}
Also used : CarbondataLocalInputSplit(io.hetu.core.plugin.carbondata.impl.CarbondataLocalInputSplit) HiveSplitWrapper(io.prestosql.plugin.hive.HiveSplitWrapper) HivePartitionManager(io.prestosql.plugin.hive.HivePartitionManager) VersionEmbedder(io.prestosql.spi.VersionEmbedder) Arrays(java.util.Arrays) HiveTableHandle(io.prestosql.plugin.hive.HiveTableHandle) DynamicFilter(io.prestosql.spi.dynamicfilter.DynamicFilter) QueryType(io.prestosql.spi.resourcegroups.QueryType) HiveColumnHandle(io.prestosql.plugin.hive.HiveColumnHandle) MetastoreUtil(io.prestosql.plugin.hive.metastore.MetastoreUtil) QueryStatistic(org.apache.carbondata.core.stats.QueryStatistic) ForHive(io.prestosql.plugin.hive.ForHive) QueryStatisticsRecorder(org.apache.carbondata.core.stats.QueryStatisticsRecorder) Logger(org.apache.log4j.Logger) ConnectorSession(io.prestosql.spi.connector.ConnectorSession) TableNotFoundException(io.prestosql.spi.connector.TableNotFoundException) HiveConfig(io.prestosql.plugin.hive.HiveConfig) Gson(com.google.gson.Gson) Configuration(org.apache.hadoop.conf.Configuration) Map(java.util.Map) HiveCarbonUtil(org.apache.carbondata.hive.util.HiveCarbonUtil) HiveTransactionHandle(io.prestosql.plugin.hive.HiveTransactionHandle) Path(org.apache.hadoop.fs.Path) Expression(org.apache.carbondata.core.scan.expression.Expression) PrestoException(io.prestosql.spi.PrestoException) ImmutableMap(com.google.common.collect.ImmutableMap) ImmutableList.toImmutableList(com.google.common.collect.ImmutableList.toImmutableList) Set(java.util.Set) NamenodeStats(io.prestosql.plugin.hive.NamenodeStats) ConnectorSplitSource(io.prestosql.spi.connector.ConnectorSplitSource) CarbonLoadModel(org.apache.carbondata.processing.loading.model.CarbonLoadModel) List(java.util.List) Table(io.prestosql.plugin.hive.metastore.Table) GENERIC_INTERNAL_ERROR(io.prestosql.spi.StandardErrorCode.GENERIC_INTERNAL_ERROR) CoercionPolicy(io.prestosql.plugin.hive.CoercionPolicy) ConnectorTransactionHandle(io.prestosql.spi.connector.ConnectorTransactionHandle) Optional(java.util.Optional) NOT_SUPPORTED(io.prestosql.spi.StandardErrorCode.NOT_SUPPORTED) CarbondataLocalInputSplit(io.hetu.core.plugin.carbondata.impl.CarbondataLocalInputSplit) ConnectorSplit(io.prestosql.spi.connector.ConnectorSplit) CarbonDataMergerUtil(org.apache.carbondata.processing.merger.CarbonDataMergerUtil) HashMap(java.util.HashMap) CompactionType(org.apache.carbondata.processing.merger.CompactionType) LoadMetadataDetails(org.apache.carbondata.core.statusmanager.LoadMetadataDetails) OptionalInt(java.util.OptionalInt) Function(java.util.function.Function) Supplier(java.util.function.Supplier) CarbondataTableReader(io.hetu.core.plugin.carbondata.impl.CarbondataTableReader) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) HdfsEnvironment(io.prestosql.plugin.hive.HdfsEnvironment) SchemaTableName(io.prestosql.spi.connector.SchemaTableName) ThreadLocalSessionInfo(org.apache.carbondata.core.util.ThreadLocalSessionInfo) ImmutableList(com.google.common.collect.ImmutableList) CarbonTimeStatisticsFactory(org.apache.carbondata.core.util.CarbonTimeStatisticsFactory) Objects.requireNonNull(java.util.Objects.requireNonNull) FixedSplitSource(io.prestosql.spi.connector.FixedSplitSource) DirectoryLister(io.prestosql.plugin.hive.DirectoryLister) SemiTransactionalHiveMetastore(io.prestosql.plugin.hive.metastore.SemiTransactionalHiveMetastore) LogServiceFactory(org.apache.carbondata.common.logging.LogServiceFactory) ExecutorService(java.util.concurrent.ExecutorService) HiveIdentity(io.prestosql.plugin.hive.authentication.HiveIdentity) Properties(java.util.Properties) HostAddress(io.prestosql.spi.HostAddress) CarbondataLocalMultiBlockSplit(io.hetu.core.plugin.carbondata.impl.CarbondataLocalMultiBlockSplit) ColumnMetadata(io.prestosql.spi.connector.ColumnMetadata) ConnectorTableHandle(io.prestosql.spi.connector.ConnectorTableHandle) TupleDomain(io.prestosql.spi.predicate.TupleDomain) TypeManager(io.prestosql.spi.type.TypeManager) IOException(java.io.IOException) QueryStatisticsConstants(org.apache.carbondata.core.stats.QueryStatisticsConstants) CarbondataTableCacheModel(io.hetu.core.plugin.carbondata.impl.CarbondataTableCacheModel) HiveSplit(io.prestosql.plugin.hive.HiveSplit) CarbonInputSplit(org.apache.carbondata.hadoop.CarbonInputSplit) CarbondataTableConfig(io.hetu.core.plugin.carbondata.impl.CarbondataTableConfig) HiveSplitManager(io.prestosql.plugin.hive.HiveSplitManager) SemiTransactionalHiveMetastore(io.prestosql.plugin.hive.metastore.SemiTransactionalHiveMetastore) HashMap(java.util.HashMap) ImmutableList.toImmutableList(com.google.common.collect.ImmutableList.toImmutableList) ImmutableList(com.google.common.collect.ImmutableList) LoadMetadataDetails(org.apache.carbondata.core.statusmanager.LoadMetadataDetails) ArrayList(java.util.ArrayList) Gson(com.google.gson.Gson) PrestoException(io.prestosql.spi.PrestoException) CarbonInputSplit(org.apache.carbondata.hadoop.CarbonInputSplit) Properties(java.util.Properties) TableNotFoundException(io.prestosql.spi.connector.TableNotFoundException) CompactionType(org.apache.carbondata.processing.merger.CompactionType) HiveTableHandle(io.prestosql.plugin.hive.HiveTableHandle) CarbondataLocalMultiBlockSplit(io.hetu.core.plugin.carbondata.impl.CarbondataLocalMultiBlockSplit) FixedSplitSource(io.prestosql.spi.connector.FixedSplitSource) CarbonLoadModel(org.apache.carbondata.processing.loading.model.CarbonLoadModel) ImmutableList.toImmutableList(com.google.common.collect.ImmutableList.toImmutableList) List(java.util.List) ArrayList(java.util.ArrayList) ImmutableList(com.google.common.collect.ImmutableList) Table(io.prestosql.plugin.hive.metastore.Table) SchemaTableName(io.prestosql.spi.connector.SchemaTableName) TableNotFoundException(io.prestosql.spi.connector.TableNotFoundException) PrestoException(io.prestosql.spi.PrestoException) IOException(java.io.IOException) HiveSplit(io.prestosql.plugin.hive.HiveSplit) ConnectorSplit(io.prestosql.spi.connector.ConnectorSplit) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) HashMap(java.util.HashMap)

Example 3 with HiveTransactionHandle

use of io.prestosql.plugin.hive.HiveTransactionHandle in project hetu-core by openlookeng.

the class SqlStandardAccessControl method isDatabaseOwner.

private boolean isDatabaseOwner(ConnectorTransactionHandle transaction, ConnectorIdentity identity, String databaseName) {
    // all users are "owners" of the default database
    if (DEFAULT_DATABASE_NAME.equalsIgnoreCase(databaseName)) {
        return true;
    }
    if (isAdmin(transaction, identity)) {
        return true;
    }
    SemiTransactionalHiveMetastore metastore = metastoreProvider.apply(((HiveTransactionHandle) transaction));
    Optional<Database> databaseMetadata = metastore.getDatabase(databaseName);
    if (!databaseMetadata.isPresent()) {
        return false;
    }
    Database database = databaseMetadata.get();
    // a database can be owned by a user or role
    if (database.getOwnerType() == USER && identity.getUser().equals(database.getOwnerName())) {
        return true;
    }
    if (database.getOwnerType() == ROLE && isRoleEnabled(identity, metastore::listRoleGrants, database.getOwnerName())) {
        return true;
    }
    return false;
}
Also used : SemiTransactionalHiveMetastore(io.prestosql.plugin.hive.metastore.SemiTransactionalHiveMetastore) Database(io.prestosql.plugin.hive.metastore.Database) HiveTransactionHandle(io.prestosql.plugin.hive.HiveTransactionHandle)

Example 4 with HiveTransactionHandle

use of io.prestosql.plugin.hive.HiveTransactionHandle in project boostkit-bigdata by kunpengcompute.

the class SqlStandardAccessControl method hasAdminOptionForRoles.

private boolean hasAdminOptionForRoles(ConnectorTransactionHandle transaction, ConnectorIdentity identity, Set<String> roles) {
    if (isAdmin(transaction, identity)) {
        return true;
    }
    SemiTransactionalHiveMetastore metastore = metastoreProvider.apply(((HiveTransactionHandle) transaction));
    Set<String> rolesWithGrantOption = listApplicableRoles(new HivePrincipal(USER, identity.getUser()), metastore::listRoleGrants).filter(RoleGrant::isGrantable).map(RoleGrant::getRoleName).collect(toSet());
    return rolesWithGrantOption.containsAll(roles);
}
Also used : RoleGrant(io.prestosql.spi.security.RoleGrant) SemiTransactionalHiveMetastore(io.prestosql.plugin.hive.metastore.SemiTransactionalHiveMetastore) HivePrincipal(io.prestosql.plugin.hive.metastore.HivePrincipal) HiveTransactionHandle(io.prestosql.plugin.hive.HiveTransactionHandle)

Example 5 with HiveTransactionHandle

use of io.prestosql.plugin.hive.HiveTransactionHandle in project boostkit-bigdata by kunpengcompute.

the class SqlStandardAccessControl method isDatabaseOwner.

private boolean isDatabaseOwner(ConnectorTransactionHandle transaction, ConnectorIdentity identity, String databaseName) {
    // all users are "owners" of the default database
    if (DEFAULT_DATABASE_NAME.equalsIgnoreCase(databaseName)) {
        return true;
    }
    if (isAdmin(transaction, identity)) {
        return true;
    }
    SemiTransactionalHiveMetastore metastore = metastoreProvider.apply(((HiveTransactionHandle) transaction));
    Optional<Database> databaseMetadata = metastore.getDatabase(databaseName);
    if (!databaseMetadata.isPresent()) {
        return false;
    }
    Database database = databaseMetadata.get();
    // a database can be owned by a user or role
    if (database.getOwnerType() == USER && identity.getUser().equals(database.getOwnerName())) {
        return true;
    }
    if (database.getOwnerType() == ROLE && isRoleEnabled(identity, metastore::listRoleGrants, database.getOwnerName())) {
        return true;
    }
    return false;
}
Also used : SemiTransactionalHiveMetastore(io.prestosql.plugin.hive.metastore.SemiTransactionalHiveMetastore) Database(io.prestosql.plugin.hive.metastore.Database) HiveTransactionHandle(io.prestosql.plugin.hive.HiveTransactionHandle)

Aggregations

HiveTransactionHandle (io.prestosql.plugin.hive.HiveTransactionHandle)5 SemiTransactionalHiveMetastore (io.prestosql.plugin.hive.metastore.SemiTransactionalHiveMetastore)5 Database (io.prestosql.plugin.hive.metastore.Database)2 HivePrincipal (io.prestosql.plugin.hive.metastore.HivePrincipal)2 ImmutableList (com.google.common.collect.ImmutableList)1 ImmutableList.toImmutableList (com.google.common.collect.ImmutableList.toImmutableList)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 Gson (com.google.gson.Gson)1 CarbondataLocalInputSplit (io.hetu.core.plugin.carbondata.impl.CarbondataLocalInputSplit)1 CarbondataLocalMultiBlockSplit (io.hetu.core.plugin.carbondata.impl.CarbondataLocalMultiBlockSplit)1 CarbondataTableCacheModel (io.hetu.core.plugin.carbondata.impl.CarbondataTableCacheModel)1 CarbondataTableConfig (io.hetu.core.plugin.carbondata.impl.CarbondataTableConfig)1 CarbondataTableReader (io.hetu.core.plugin.carbondata.impl.CarbondataTableReader)1 CoercionPolicy (io.prestosql.plugin.hive.CoercionPolicy)1 DirectoryLister (io.prestosql.plugin.hive.DirectoryLister)1 ForHive (io.prestosql.plugin.hive.ForHive)1 HdfsEnvironment (io.prestosql.plugin.hive.HdfsEnvironment)1 HiveColumnHandle (io.prestosql.plugin.hive.HiveColumnHandle)1 HiveConfig (io.prestosql.plugin.hive.HiveConfig)1 HivePartitionManager (io.prestosql.plugin.hive.HivePartitionManager)1