diff --git a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java
index f0312d5..450c211 100644
--- a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java
+++ b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java
@@ -30,13 +30,13 @@
             case "Service":
                 columnList = new LinkedList<>();
                 // Service id;
-                idColumn = new SourceColumn("id", "id", int.class, true);
+                idColumn = new SourceColumn("entityId", "entity_id", String.class, true);
                 columnList.add(idColumn);
                 return columnList;
             case "ServiceInstance":
                 columnList = new LinkedList<>();
                 // Service instance id;
-                idColumn = new SourceColumn("id", "id", int.class, true);
+                idColumn = new SourceColumn("entityId", "entity_id", String.class, true);
                 columnList.add(idColumn);
                 SourceColumn serviceIdColumn = new SourceColumn("serviceId", "service_id", int.class, false);
                 columnList.add(serviceIdColumn);
@@ -44,7 +44,7 @@
             case "Endpoint":
                 columnList = new LinkedList<>();
                 // Endpoint id;
-                idColumn = new SourceColumn("id", "id", int.class, true);
+                idColumn = new SourceColumn("entityId", "entity_id", String.class, true);
                 columnList.add(idColumn);
                 serviceIdColumn = new SourceColumn("serviceId", "service_id", int.class, false);
                 columnList.add(serviceIdColumn);
@@ -57,42 +57,37 @@
             case "ServiceInstanceJVMGC":
                 columnList = new LinkedList<>();
                 // Service instance id;
-                idColumn = new SourceColumn("id", "id", int.class, true);
+                idColumn = new SourceColumn("entityId", "entity_id", String.class, true);
                 columnList.add(idColumn);
                 serviceInstanceIdColumn = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false);
                 columnList.add(serviceInstanceIdColumn);
                 return columnList;
             case "ServiceRelation":
                 columnList = new LinkedList<>();
-                SourceColumn sourceService = new SourceColumn("sourceServiceId", "source_service_id", int.class, true);
+                SourceColumn sourceService = new SourceColumn("entityId", "source_service_id", String.class, true);
                 columnList.add(sourceService);
-                SourceColumn destService = new SourceColumn("destServiceId", "dest_service_id", int.class, true);
-                columnList.add(destService);
                 return columnList;
             case "ServiceInstanceRelation":
                 columnList = new LinkedList<>();
+                sourceService = new SourceColumn("entityId", "entity_id", String.class, true);
+                columnList.add(sourceService);
                 sourceService = new SourceColumn("sourceServiceId", "source_service_id", int.class, false);
                 columnList.add(sourceService);
-                destService = new SourceColumn("destServiceId", "dest_service_id", int.class, false);
+                SourceColumn destService = new SourceColumn("destServiceId", "destServiceId", int.class, false);
                 columnList.add(destService);
-                SourceColumn sourceServiceInstance = new SourceColumn("sourceServiceInstanceId", "source_service_instance_id", int.class, true);
-                columnList.add(sourceServiceInstance);
-                SourceColumn destServiceInstance = new SourceColumn("destServiceInstanceId", "dest_service_instance_id", int.class, true);
-                columnList.add(destServiceInstance);
+
                 return columnList;
             case "EndpointRelation":
                 columnList = new LinkedList<>();
-                SourceColumn sourceEndpointColumn = new SourceColumn("endpointId", "endpoint_id", int.class, true);
+                SourceColumn sourceEndpointColumn = new SourceColumn("entityId", "entity_id", String.class, true);
                 columnList.add(sourceEndpointColumn);
-                SourceColumn childEndpointColumne = new SourceColumn("childEndpointId", "child_endpoint_id", int.class, true);
-                columnList.add(childEndpointColumne);
                 sourceService = new SourceColumn("serviceId", "service_id", int.class, false);
                 columnList.add(sourceService);
                 destService = new SourceColumn("childServiceId", "child_service_id", int.class, false);
                 columnList.add(destService);
-                sourceServiceInstance = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false);
+                SourceColumn sourceServiceInstance = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false);
                 columnList.add(sourceServiceInstance);
-                destServiceInstance = new SourceColumn("childServiceInstanceId", "child_service_instance_id", int.class, false);
+                SourceColumn destServiceInstance = new SourceColumn("childServiceInstanceId", "child_service_instance_id", int.class, false);
                 columnList.add(destServiceInstance);
                 return columnList;
             default:
diff --git a/oal-parser/src/main/resources/code-templates/IndicatorImplementor.ftl b/oal-parser/src/main/resources/code-templates/IndicatorImplementor.ftl
index 288de69..6576b3a 100644
--- a/oal-parser/src/main/resources/code-templates/IndicatorImplementor.ftl
+++ b/oal-parser/src/main/resources/code-templates/IndicatorImplementor.ftl
@@ -56,7 +56,11 @@
         String splitJointId = String.valueOf(getTimeBucket());
 <#list fieldsFromSource as sourceField>
     <#if sourceField.isID()>
+        <#if sourceField.getTypeName() == "String">
+        splitJointId += Const.ID_SPLIT + ${sourceField.fieldName};
+        <#else>
         splitJointId += Const.ID_SPLIT + String.valueOf(${sourceField.fieldName});
+        </#if>
     </#if>
 </#list>
         return splitJointId;
@@ -66,13 +70,32 @@
         int result = 17;
 <#list fieldsFromSource as sourceField>
     <#if sourceField.isID()>
-        result = 31 * result + ${sourceField.fieldName};
+        <#if sourceField.getTypeName() == "String">
+        result = 31 * result + ${sourceField.fieldName}.hashCode();
+        <#else>
+        result += Const.ID_SPLIT + ${sourceField.fieldName};
+        </#if>
     </#if>
 </#list>
         result = 31 * result + (int)getTimeBucket();
         return result;
     }
 
+
+    @Override public int remoteHashCode() {
+        int result = 17;
+<#list fieldsFromSource as sourceField>
+    <#if sourceField.isID()>
+        <#if sourceField.getTypeName() == "String">
+        result = 31 * result + ${sourceField.fieldName}.hashCode();
+        <#else>
+        result += Const.ID_SPLIT + ${sourceField.fieldName};
+        </#if>
+    </#if>
+</#list>
+        return result;
+    }
+
     @Override public boolean equals(Object obj) {
         if (this == obj)
             return true;
@@ -146,7 +169,7 @@
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("${varName}", Scope.${sourceName}<#if (fieldsFromSource?size>0) >, <#list fieldsFromSource as field>${field.fieldName}<#if field_has_next>, </#if></#list></#if>);
+        return new AlarmMeta("${varName}", Scope.${sourceName}<#if (fieldsFromSource?size>0) ><#list fieldsFromSource as field><#if field.isID()>, ${field.fieldName}</#if></#list></#if>);
     }
 
     @Override
