This is an automated email from the ASF dual-hosted git repository.

dishatalreja pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git


The following commit(s) were added to refs/heads/master by this push:
     new 2eafacd49 ATLAS-5084: provide a way to transform hdfs paths during 
atlas import (#416)
2eafacd49 is described below

commit 2eafacd49ebc1acb8aebe7d33cccc50ebde3536b
Author: Disha Talreja <[email protected]>
AuthorDate: Wed Aug 20 10:35:45 2025 -0700

    ATLAS-5084: provide a way to transform hdfs paths during atlas import (#416)
---
 .../atlas/repository/impexp/ImportTransformer.java | 13 +++++++++----
 .../repository/impexp/AtlasImportRequestTest.java  |  4 ++--
 .../atlas/repository/impexp/ImportServiceTest.java |  4 ++--
 .../impexp/ImportTransformerJSONTest.java          |  2 +-
 .../repository/impexp/ImportTransformerTest.java   | 12 ++++++------
 .../impexp/ImportTransformsShaperTest.java         |  2 +-
 .../repository/impexp/ImportTransformsTest.java    | 22 +++++++++++-----------
 .../atlas/repository/impexp/ZipSourceTest.java     |  2 +-
 8 files changed, 33 insertions(+), 28 deletions(-)

diff --git 
a/repository/src/main/java/org/apache/atlas/repository/impexp/ImportTransformer.java
 
b/repository/src/main/java/org/apache/atlas/repository/impexp/ImportTransformer.java
index c472b9444..7cb5948bc 100644
--- 
a/repository/src/main/java/org/apache/atlas/repository/impexp/ImportTransformer.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/impexp/ImportTransformer.java
@@ -31,7 +31,7 @@ import java.util.Map;
 import java.util.Objects;
 
 public abstract class ImportTransformer {
-    private static final String TRANSFORMER_PARAMETER_SEPARATOR = "\\:";
+    private static final String TRANSFORMER_PARAMETER_SEPARATOR = "~";
 
     private static final String TRANSFORMER_NAME_ADD                   = "add";
     private static final String TRANSFORMER_NAME_CLEAR_ATTR            = 
"clearAttrValue";
@@ -49,6 +49,11 @@ public abstract class ImportTransformer {
     }
 
     public static ImportTransformer getTransformer(String transformerSpec) 
throws AtlasBaseException {
+        if (transformerSpec.contains(":") && 
!transformerSpec.contains(TRANSFORMER_PARAMETER_SEPARATOR)) {
+            throw new AtlasBaseException(AtlasErrorCode.INVALID_VALUE,
+                    "Invalid transformer specification. The parameter 
separator ':' is no longer supported. Use '~' instead. Transformer 
specification: " + transformerSpec);
+        }
+
         String[] params = StringUtils.split(transformerSpec, 
TRANSFORMER_PARAMETER_SEPARATOR);
         String   key    = (params == null || params.length < 1) ? 
transformerSpec : params[0];
 
@@ -66,13 +71,13 @@ public abstract class ImportTransformer {
         } else if (key.equals(TRANSFORMER_NAME_UPPERCASE)) {
             ret = new Uppercase();
         } else if (key.equals(TRANSFORMER_NAME_REMOVE_CLASSIFICATION)) {
-            String name = (params == null || params.length < 1) ? "" : 
StringUtils.join(params, ":", 1, params.length);
+            String name = (params == null || params.length < 1) ? "" : 
StringUtils.join(params, "~", 1, params.length);
             ret = new RemoveClassification(name);
         } else if (key.equals(TRANSFORMER_NAME_ADD)) {
-            String name = (params == null || params.length < 1) ? "" : 
StringUtils.join(params, ":", 1, params.length);
+            String name = (params == null || params.length < 1) ? "" : 
StringUtils.join(params, "~", 1, params.length);
             ret = new AddValueToAttribute(name);
         } else if (key.equals(TRANSFORMER_NAME_CLEAR_ATTR)) {
-            String name = (params == null || params.length < 1) ? "" : 
StringUtils.join(params, ":", 1, params.length);
+            String name = (params == null || params.length < 1) ? "" : 
StringUtils.join(params, "~", 1, params.length);
             ret = new ClearAttributes(name);
         } else if (key.equals(TRANSFORMER_SET_DELETED)) {
             ret = new SetDeleted();
diff --git 
a/repository/src/test/java/org/apache/atlas/repository/impexp/AtlasImportRequestTest.java
 
b/repository/src/test/java/org/apache/atlas/repository/impexp/AtlasImportRequestTest.java
index 0d04d6724..7c91ef441 100644
--- 
a/repository/src/test/java/org/apache/atlas/repository/impexp/AtlasImportRequestTest.java
+++ 
b/repository/src/test/java/org/apache/atlas/repository/impexp/AtlasImportRequestTest.java
@@ -102,7 +102,7 @@ public class AtlasImportRequestTest {
 
     @Test
     public void serializeAtlasImportRequstFromJsonWith1Transform() {
-        String jsonData = "{ \"options\": { \"transforms\": \"{ 
\\\"hive_db\\\": { \\\"qualifiedName\\\": [ \\\"replace:@cl1:@cl2\\\" ] } }\" } 
}";
+        String jsonData = "{ \"options\": { \"transforms\": \"{ 
\\\"hive_db\\\": { \\\"qualifiedName\\\": [ \\\"replace~@cl1~@cl2\\\" ] } }\" } 
}";
 
         AtlasImportRequest request = AtlasType.fromJson(jsonData, 
AtlasImportRequest.class);
 
@@ -123,7 +123,7 @@ public class AtlasImportRequestTest {
 
     @Test
     public void serializeAtlasImportRequstFromJson() {
-        String jsonData = "{ \"options\": { \"transforms\": \"{ 
\\\"hive_db\\\": { \\\"qualifiedName\\\": [ \\\"replace:@cl1:@cl2\\\" ] }, 
\\\"hive_table\\\": { \\\"qualifiedName\\\": [ \\\"lowercase\\\", 
\\\"replace:@cl1:@cl2\\\" ] } }\" } } }";
+        String jsonData = "{ \"options\": { \"transforms\": \"{ 
\\\"hive_db\\\": { \\\"qualifiedName\\\": [ \\\"replace~@cl1~@cl2\\\" ] }, 
\\\"hive_table\\\": { \\\"qualifiedName\\\": [ \\\"lowercase\\\", 
\\\"replace~@cl1~@cl2\\\" ] } }\" } } }";
 
         AtlasImportRequest request = AtlasType.fromJson(jsonData, 
AtlasImportRequest.class);
 
diff --git 
a/repository/src/test/java/org/apache/atlas/repository/impexp/ImportServiceTest.java
 
b/repository/src/test/java/org/apache/atlas/repository/impexp/ImportServiceTest.java
index dbf84dbde..66cada7de 100644
--- 
a/repository/src/test/java/org/apache/atlas/repository/impexp/ImportServiceTest.java
+++ 
b/repository/src/test/java/org/apache/atlas/repository/impexp/ImportServiceTest.java
@@ -844,7 +844,7 @@ public class ImportServiceTest extends AtlasTestBase {
         loadBaseModel();
         loadHiveModel();
 
-        String    transformJSON = "{ \"Asset\": { \"qualifiedName\":[ 
\"lowercase\", \"replace:@cl1:@cl2\" ] } }";
+        String    transformJSON = "{ \"Asset\": { \"qualifiedName\":[ 
\"lowercase\", \"replace~@cl1~@cl2\" ] } }";
         ZipSource zipSource     = new ZipSource(inputStream);
         importService.setImportTransform(zipSource, transformJSON);
         ImportTransforms importTransforms = zipSource.getImportTransform();
@@ -859,7 +859,7 @@ public class ImportServiceTest extends AtlasTestBase {
         loadBaseModel();
         loadHiveModel();
 
-        String    transformJSON = "{ \"Asset\": { \"qualifiedName\":[ 
\"replace:@cl1:@cl2\" ] }, \"hive_table\": { \"qualifiedName\":[ \"lowercase\" 
] } }";
+        String    transformJSON = "{ \"Asset\": { \"qualifiedName\":[ 
\"replace~@cl1~@cl2\" ] }, \"hive_table\": { \"qualifiedName\":[ \"lowercase\" 
] } }";
         ZipSource zipSource     = new ZipSource(inputStream);
         importService.setImportTransform(zipSource, transformJSON);
         ImportTransforms importTransforms = zipSource.getImportTransform();
diff --git 
a/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformerJSONTest.java
 
b/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformerJSONTest.java
index 4a99f440c..5d34208f8 100644
--- 
a/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformerJSONTest.java
+++ 
b/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformerJSONTest.java
@@ -28,7 +28,7 @@ public class ImportTransformerJSONTest {
     public void createAtlasImportTransformFromJson() throws Exception {
         String hiveTableType  = "hive_table";
         String qualifiedName  = "qualifiedName";
-        String jsonTransforms = "{ \"hive_table\": { \"qualifiedName\":[ 
\"lowercase\", \"replace:@cl1:@cl2\" ] } }";
+        String jsonTransforms = "{ \"hive_table\": { \"qualifiedName\":[ 
\"lowercase\", \"replace~@cl1~@cl2\" ] } }";
 
         ImportTransforms transforms = 
ImportTransforms.fromJson(jsonTransforms);
 
diff --git 
a/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformerTest.java
 
b/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformerTest.java
index 5a2e5c761..819cf2f9c 100644
--- 
a/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformerTest.java
+++ 
b/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformerTest.java
@@ -30,7 +30,7 @@ public class ImportTransformerTest {
         String param1 = "@cl1";
         String param2 = "@cl2";
 
-        ImportTransformer e = 
ImportTransformer.getTransformer(String.format("%s:%s:%s", "replace", param1, 
param2));
+        ImportTransformer e = 
ImportTransformer.getTransformer(String.format("%s~%s~%s", "replace", param1, 
param2));
 
         assertTrue(e instanceof ImportTransformer.Replace);
         assertEquals(((ImportTransformer.Replace) e).getToFindStr(), param1);
@@ -42,8 +42,8 @@ public class ImportTransformerTest {
         String param1 = "@cl1";
         String param2 = "@cl2";
 
-        ImportTransformer e1 = 
ImportTransformer.getTransformer(String.format("%s:%s:%s", "replace", param1, 
param2));
-        ImportTransformer e2 = 
ImportTransformer.getTransformer("replace:tt1:tt2");
+        ImportTransformer e1 = 
ImportTransformer.getTransformer(String.format("%s~%s~%s", "replace", param1, 
param2));
+        ImportTransformer e2 = 
ImportTransformer.getTransformer(String.format("replace~tt1~tt2"));
 
         assertTrue(e1 instanceof ImportTransformer.Replace);
         assertEquals(((ImportTransformer.Replace) e1).getToFindStr(), param1);
@@ -56,7 +56,7 @@ public class ImportTransformerTest {
 
     @Test
     public void createWithDefaultParameters() throws AtlasBaseException {
-        ImportTransformer e1 = 
ImportTransformer.getTransformer("replace:@cl1");
+        ImportTransformer e1 = 
ImportTransformer.getTransformer("replace~@cl1");
         ImportTransformer e2 = ImportTransformer.getTransformer("replace");
 
         assertTrue(e1 instanceof ImportTransformer.Replace);
@@ -92,7 +92,7 @@ public class ImportTransformerTest {
 
     @Test
     public void applyReplaceTransformer1() throws AtlasBaseException {
-        ImportTransformer e = 
ImportTransformer.getTransformer("replace:@cl1:@cl2");
+        ImportTransformer e = 
ImportTransformer.getTransformer("replace~@cl1~@cl2");
 
         assertEquals(e.apply("@cl1"), "@cl2");
         assertEquals(e.apply("default@cl1"), "default@cl2");
@@ -105,7 +105,7 @@ public class ImportTransformerTest {
 
     @Test
     public void applyReplaceTransformer2() throws AtlasBaseException {
-        ImportTransformer e = ImportTransformer.getTransformer("replace:@cl1");
+        ImportTransformer e = ImportTransformer.getTransformer("replace~@cl1");
 
         assertEquals(e.apply("@cl1"), "");
         assertEquals(e.apply("default@cl1"), "default");
diff --git 
a/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformsShaperTest.java
 
b/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformsShaperTest.java
index 54fc4e002..f9f1dcc05 100644
--- 
a/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformsShaperTest.java
+++ 
b/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformsShaperTest.java
@@ -100,7 +100,7 @@ public class ImportTransformsShaperTest extends 
AtlasTestBase {
     private AtlasImportRequest getImporRequest() {
         AtlasImportRequest request = new AtlasImportRequest();
 
-        request.getOptions().put("transforms", "{ \"Referenceable\": { \"*\":[ 
\"addClassification:REPLICATED\" ] } }");
+        request.getOptions().put("transforms", "{ \"Referenceable\": { \"*\":[ 
\"addClassification~REPLICATED\" ] } }");
 
         return request;
     }
diff --git 
a/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformsTest.java
 
b/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformsTest.java
index 200bcad86..48ca56bc6 100644
--- 
a/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformsTest.java
+++ 
b/repository/src/test/java/org/apache/atlas/repository/impexp/ImportTransformsTest.java
@@ -47,16 +47,16 @@ public class ImportTransformsTest {
 
     private final String lowerCaseCL1                    = "@cl1";
     private final String lowerCaseCL2                    = "@cl2";
-    private final String jsonLowerCaseReplace            = "{ \"hive_table\": 
{ \"qualifiedName\":[ \"lowercase\", \"replace:@cl1:@cl2\" ] } }";
-    private final String jsonReplaceLowerCase            = "{ \"Asset\": { 
\"qualifiedName\":[ \"replace:@cl1:@cl2\" ] }, \"hive_table\": { 
\"qualifiedName\":[ \"lowercase\", \"replace:@cl1:@cl2\" ] } }";
-    private final String jsonReplaceRemoveClassification = "{ \"hive_table\": 
{ \"qualifiedName\":[ \"replace:@%s:@%s\"], \"*\":[ 
\"removeClassification:%s_to_%s\" ] } }";
-    private final String jsonReplaceAndAddAttrValue      = "{ \"hive_table\": 
{ \"qualifiedName\":[ \"replace:@%s:@%s\"], \"*\":[ \"add:%s=list:%s\" ] } }";
-    private final String jsonSingleClearAttrValue        = "{ \"hive_table\": 
{ \"*\":[ \"clearAttrValue:replicatedToCluster\", 
\"clearAttrValue:replicatedFromCluster\" ] } }";
-    private final String jsonMultipleClearAttrValue      = "{ \"hive_table\": 
{ \"*\":[ \"clearAttrValue:replicatedToCluster,replicatedFromCluster\" ] } }";
-    private final String jsonSetDeleted                  = "{ \"hive_table\": 
{ \"*\":[ \"setDeleted\" ] } }";
-    private final String jsonAddClasification            = "{ \"hive_table\": 
{ \"*\":[ \"addClassification:REPLICATED\" ] } }";
-    private final String jsonAddClasification2           = "{ \"hive_table\": 
{ \"*\":[ \"addClassification:REPLICATED_2\" ] } }";
-    private final String jsonAddClasificationScoped      = "{ \"hive_column\": 
{ \"*\":[ \"addClassification:REPLICATED_2:topLevel\" ] } }";
+    private final String jsonLowerCaseReplace = "{ \"hive_table\": { 
\"qualifiedName\":[ \"lowercase\", \"replace~@cl1~@cl2\" ] } }";
+    private final String jsonReplaceLowerCase = "{ \"Asset\": { 
\"qualifiedName\":[ \"replace~@cl1~@cl2\" ] }, \"hive_table\": { 
\"qualifiedName\":[ \"lowercase\", \"replace~@cl1~@cl2\" ] } }";
+    private final String jsonReplaceRemoveClassification = "{ \"hive_table\": 
{ \"qualifiedName\":[ \"replace~@%s~@%s\"], \"*\":[ 
\"removeClassification~%s_to_%s\" ] } }";
+    private final String jsonReplaceAndAddAttrValue = "{ \"hive_table\": { 
\"qualifiedName\":[ \"replace~@%s~@%s\"], \"*\":[ \"add~%s=list:%s\" ] } }";
+    private final String jsonSingleClearAttrValue = "{ \"hive_table\": { 
\"*\":[ \"clearAttrValue~replicatedToCluster\", 
\"clearAttrValue~replicatedFromCluster\" ] } }";
+    private final String jsonMultipleClearAttrValue = "{ \"hive_table\": { 
\"*\":[ \"clearAttrValue~replicatedToCluster,replicatedFromCluster\" ] } }";
+    private final String jsonSetDeleted = "{ \"hive_table\": { \"*\":[ 
\"setDeleted\" ] } }";
+    private final String jsonAddClasification = "{ \"hive_table\": { \"*\":[ 
\"addClassification~REPLICATED\" ] } }";
+    private final String jsonAddClasification2 = "{ \"hive_table\": { \"*\":[ 
\"addClassification~REPLICATED_2\" ] } }";
+    private final String jsonAddClasificationScoped = "{ \"hive_column\": { 
\"*\":[ \"addClassification~REPLICATED_2~topLevel\" ] } }";
 
     private ImportTransforms transform;
 
@@ -278,7 +278,7 @@ public class ImportTransformsTest {
         Map<String, List<ImportTransformer>> tr     = new HashMap<>();
         List<ImportTransformer>              trList = new ArrayList<>();
 
-        
trList.add(ImportTransformer.getTransformer(String.format("replace:%s:%s", 
lowerCaseCL1, lowerCaseCL2)));
+        
trList.add(ImportTransformer.getTransformer(String.format("replace~%s~%s", 
lowerCaseCL1, lowerCaseCL2)));
         tr.put(ATTR_NAME_QUALIFIED_NAME, trList);
 
         transform.getTransforms().put("hive_column", tr);
diff --git 
a/repository/src/test/java/org/apache/atlas/repository/impexp/ZipSourceTest.java
 
b/repository/src/test/java/org/apache/atlas/repository/impexp/ZipSourceTest.java
index 2a9e4f6bf..b948b45c4 100644
--- 
a/repository/src/test/java/org/apache/atlas/repository/impexp/ZipSourceTest.java
+++ 
b/repository/src/test/java/org/apache/atlas/repository/impexp/ZipSourceTest.java
@@ -202,6 +202,6 @@ public class ZipSourceTest {
     }
 
     private ImportTransforms getTransformForHiveDB() {
-        return ImportTransforms.fromJson("{ \"hive_db\": { \"qualifiedName\": 
[ \"replace:@cl1:@cl2\" ] } }");
+        return ImportTransforms.fromJson("{ \"hive_db\": { \"qualifiedName\": 
[ \"replace~@cl1~@cl2\" ] } }");
     }
 }

Reply via email to