| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import static junit.framework.TestCase.assertEquals; |
| |
| import org.apache.avro.generic.GenericRecord; |
| import org.apache.hudi.DataSourceWriteOptions; |
| import org.apache.hudi.common.config.TypedProperties; |
| import org.apache.hudi.common.model.HoodieKey; |
| import org.apache.hudi.common.testutils.HoodieTestDataGenerator; |
| import org.apache.hudi.keygen.ComplexKeyGenerator; |
| import org.junit.jupiter.api.Test; |
| |
| public class TestComplexKeyGenerator { |
| |
| @Test |
| public void testSingleValueKeyGenerator() { |
| TypedProperties properties = new TypedProperties(); |
| properties.setProperty(DataSourceWriteOptions.RECORDKEY_FIELD_OPT_KEY(), "_row_key"); |
| properties.setProperty(DataSourceWriteOptions.PARTITIONPATH_FIELD_OPT_KEY(), "timestamp"); |
| ComplexKeyGenerator compositeKeyGenerator = new ComplexKeyGenerator(properties); |
| assertEquals(compositeKeyGenerator.getRecordKeyFields().size(), 1); |
| assertEquals(compositeKeyGenerator.getPartitionPathFields().size(), 1); |
| HoodieTestDataGenerator dataGenerator = new HoodieTestDataGenerator(); |
| GenericRecord record = dataGenerator.generateGenericRecords(1).get(0); |
| String rowKey = record.get("_row_key").toString(); |
| String partitionPath = record.get("timestamp").toString(); |
| HoodieKey hoodieKey = compositeKeyGenerator.getKey(record); |
| assertEquals("_row_key:" + rowKey, hoodieKey.getRecordKey()); |
| assertEquals(partitionPath, hoodieKey.getPartitionPath()); |
| } |
| |
| @Test |
| public void testMultipleValueKeyGenerator() { |
| TypedProperties properties = new TypedProperties(); |
| properties.setProperty(DataSourceWriteOptions.RECORDKEY_FIELD_OPT_KEY(), "_row_key,timestamp"); |
| properties.setProperty(DataSourceWriteOptions.PARTITIONPATH_FIELD_OPT_KEY(), "rider,driver"); |
| ComplexKeyGenerator compositeKeyGenerator = new ComplexKeyGenerator(properties); |
| assertEquals(compositeKeyGenerator.getRecordKeyFields().size(), 2); |
| assertEquals(compositeKeyGenerator.getPartitionPathFields().size(), 2); |
| HoodieTestDataGenerator dataGenerator = new HoodieTestDataGenerator(); |
| GenericRecord record = dataGenerator.generateGenericRecords(1).get(0); |
| String rowKey = |
| "_row_key" + ComplexKeyGenerator.DEFAULT_RECORD_KEY_SEPARATOR + record.get("_row_key").toString() + "," |
| + "timestamp" + ComplexKeyGenerator.DEFAULT_RECORD_KEY_SEPARATOR + record.get("timestamp").toString(); |
| String partitionPath = record.get("rider").toString() + "/" + record.get("driver").toString(); |
| HoodieKey hoodieKey = compositeKeyGenerator.getKey(record); |
| assertEquals(rowKey, hoodieKey.getRecordKey()); |
| assertEquals(partitionPath, hoodieKey.getPartitionPath()); |
| } |
| |
| } |