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

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


The following commit(s) were added to refs/heads/master by this push:
     new 686e48f2684 [Enhencement](tvf) select tvf supports using resource 
(#35139)
686e48f2684 is described below

commit 686e48f26841e418a229987a3bffb8992c9bb16e
Author: Tiewei Fang <43782773+bepppo...@users.noreply.github.com>
AuthorDate: Fri May 24 12:05:52 2024 +0800

    [Enhencement](tvf) select tvf supports using resource (#35139)
    
    Create an S3/HDFS resource that TVF can use it directly to access the data 
source.
---
 .../ExternalFileTableValuedFunction.java           | 12 +++-
 .../tvf/test_s3_tvf_with_resource.out              | 70 ++++++++++++++++++++++
 .../external_table_p0/tvf/test_s3_tvf.groovy       |  4 --
 ...tvf.groovy => test_s3_tvf_with_resource.groovy} | 64 ++++++++++----------
 4 files changed, 114 insertions(+), 36 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java
index d692e6c9d30..10c57f68655 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java
@@ -26,6 +26,7 @@ import org.apache.doris.catalog.Env;
 import org.apache.doris.catalog.HdfsResource;
 import org.apache.doris.catalog.MapType;
 import org.apache.doris.catalog.PrimitiveType;
+import org.apache.doris.catalog.Resource;
 import org.apache.doris.catalog.ScalarType;
 import org.apache.doris.catalog.StructField;
 import org.apache.doris.catalog.StructType;
@@ -174,9 +175,18 @@ public abstract class ExternalFileTableValuedFunction 
extends TableValuedFunctio
 
     //The keys in properties map need to be lowercase.
     protected Map<String, String> parseCommonProperties(Map<String, String> 
properties) throws AnalysisException {
+        Map<String, String> mergedProperties = Maps.newHashMap();
+        if (properties.containsKey("resource")) {
+            Resource resource = 
Env.getCurrentEnv().getResourceMgr().getResource(properties.get("resource"));
+            if (resource == null) {
+                throw new AnalysisException("Can not find resource: " + 
properties.get("resource"));
+            }
+            mergedProperties = resource.getCopiedProperties();
+        }
+        mergedProperties.putAll(properties);
         // Copy the properties, because we will remove the key from properties.
         Map<String, String> copiedProps = 
Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER);
-        copiedProps.putAll(properties);
+        copiedProps.putAll(mergedProperties);
 
         String formatString = getOrDefaultAndRemove(copiedProps, 
FileFormatConstants.PROP_FORMAT, "").toLowerCase();
         String defaultColumnSeparator = 
FileFormatConstants.DEFAULT_COLUMN_SEPARATOR;
diff --git 
a/regression-test/data/external_table_p0/tvf/test_s3_tvf_with_resource.out 
b/regression-test/data/external_table_p0/tvf/test_s3_tvf_with_resource.out
new file mode 100644
index 00000000000..e7ed7f6af85
--- /dev/null
+++ b/regression-test/data/external_table_p0/tvf/test_s3_tvf_with_resource.out
@@ -0,0 +1,70 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select_base --
+1      doris1  18
+2      doris2  19
+3      doris3  99
+4      doris4  \N
+5      doris5  15
+
+-- !select_1 --
+1      doris1  18
+2      doris2  19
+3      doris3  99
+4      doris4  \N
+5      doris5  15
+
+-- !select_2 --
+1      doris1  18
+2      doris2  19
+3      doris3  99
+4      doris4  \N
+5      doris5  15
+
+-- !select_3 --
+1      doris1  18
+2      doris2  19
+3      doris3  99
+4      doris4  \N
+5      doris5  15
+
+-- !select_4 --
+12     abcdef  1.23
+12313  kkkkkk  5.77
+123456 abcdef  1.2
+126    abcdef  1.25
+13     abcdef  1.24
+156    ahef    1.26
+323456 oooodef 1.27
+5456   abadsasf        1.28
+723456 text    1.3
+823456 hive    1.32
+923456 helloworld      1.89
+
+-- !select_5 --
+12     abcdef  1.23
+12313  kkkkkk  5.77
+123456 abcdef  1.2
+126    abcdef  1.25
+13     abcdef  1.24
+156    ahef    1.26
+323456 oooodef 1.27
+5456   abadsasf        1.28
+723456 text    1.3
+823456 hive    1.32
+923456 helloworld      1.89
+
+-- !select_6 --
+12313  kkkkkk  5.77
+923456 helloworld      1.89
+
+-- !select_7 --
+12313  kkkkkk  5.77
+123456 abcdef  1.2
+126    abcdef  1.25
+156    ahef    1.26
+323456 oooodef 1.27
+5456   abadsasf        1.28
+723456 text    1.3
+823456 hive    1.32
+923456 helloworld      1.89
+
diff --git a/regression-test/suites/external_table_p0/tvf/test_s3_tvf.groovy 
b/regression-test/suites/external_table_p0/tvf/test_s3_tvf.groovy
index 4f09680ba53..24dda4196d7 100644
--- a/regression-test/suites/external_table_p0/tvf/test_s3_tvf.groovy
+++ b/regression-test/suites/external_table_p0/tvf/test_s3_tvf.groovy
@@ -124,7 +124,6 @@ suite("test_s3_tvf", "p0") {
                             "s3.access_key"= "${ak}",
                             "s3.secret_key" = "${sk}",
                             "format" = "hive_text",
-                            "use_path_style" = "true",
                             "region" = "${region}"
                         ) order by c1,c2,c3;
                         """
@@ -137,7 +136,6 @@ suite("test_s3_tvf", "p0") {
                             "s3.access_key"= "${ak}",
                             "s3.secret_key" = "${sk}",
                             "format" = "hive_text",
-                            "use_path_style" = "true",
                             "region" = "${region}",
                             "csv_schema"="k1:int;k2:string;k3:double"
                         ) order by k1,k2,k3;
@@ -151,7 +149,6 @@ suite("test_s3_tvf", "p0") {
                             "s3.access_key"= "${ak}",
                             "s3.secret_key" = "${sk}",
                             "format" = "hive_text",
-                            "use_path_style" = "true",
                             "region" = "${region}",
                             "csv_schema"="k1:int;k2:string;k3:double"
                         )  where k3 > 1.5  order by k3,k2,k1;
@@ -165,7 +162,6 @@ suite("test_s3_tvf", "p0") {
                             "s3.access_key"= "${ak}",
                             "s3.secret_key" = "${sk}",
                             "format" = "hive_text",
-                            "use_path_style" = "true",
                             "region" = "${region}",
                             "csv_schema"="k1:int;k2:string;k3:double"
                         )  where k1 > 100  order by k3,k2,k1;
diff --git a/regression-test/suites/external_table_p0/tvf/test_s3_tvf.groovy 
b/regression-test/suites/external_table_p0/tvf/test_s3_tvf_with_resource.groovy
similarity index 78%
copy from regression-test/suites/external_table_p0/tvf/test_s3_tvf.groovy
copy to 
regression-test/suites/external_table_p0/tvf/test_s3_tvf_with_resource.groovy
index 4f09680ba53..0f5f43ccb8e 100644
--- a/regression-test/suites/external_table_p0/tvf/test_s3_tvf.groovy
+++ 
b/regression-test/suites/external_table_p0/tvf/test_s3_tvf_with_resource.groovy
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-suite("test_s3_tvf", "p0") {
+suite("test_s3_tvf_with_resource", "p0") {
     // open nereids
     sql """ set enable_nereids_planner=true """
     sql """ set enable_fallback_to_original_planner=false """
@@ -27,8 +27,9 @@ suite("test_s3_tvf", "p0") {
     String bucket = context.config.otherConfigs.get("s3BucketName");
 
 
-    def export_table_name = "test_s3_tvf_export_test"
+    def export_table_name = "test_s3_tvf_with_resource_export_test"
     def outFilePath = "${bucket}/est_s3_tvf/export_test/exp_"
+    def resource_name = "test_s3_tvf_resource"
 
 
     def create_table = {table_name ->
@@ -43,6 +44,22 @@ suite("test_s3_tvf", "p0") {
         """
     }
 
+    def create_s3_resource = {
+        sql """ DROP RESOURCE IF EXISTS '${resource_name}' """
+        sql """
+            CREATE RESOURCE "${resource_name}"
+            PROPERTIES
+            (
+                "type" = "s3",
+                "s3.endpoint" = "${s3_endpoint}",
+                "s3.region" = "${region}",
+                "s3.access_key"= "${ak}",
+                "s3.secret_key" = "${sk}",
+                "s3.bucket" = "${bucket}"
+            );
+            """
+    }
+
     def outfile_to_S3 = {
         // select ... into outfile ...
         def res = sql """
@@ -63,6 +80,9 @@ suite("test_s3_tvf", "p0") {
     // create table to export data
     create_table(export_table_name)
 
+    // create s3 resource
+    create_s3_resource()
+
     // insert data
     sql """ insert into ${export_table_name} values (1, 'doris1', 18); """
     sql """ insert into ${export_table_name} values (2, 'doris2', 19); """
@@ -80,10 +100,9 @@ suite("test_s3_tvf", "p0") {
     try {
         order_qt_select_1 """ SELECT * FROM S3 (
                             "uri" = 
"http://${s3_endpoint}${outfile_url.substring(4, outfile_url.length() - 
1)}0.orc",
-                            "ACCESS_KEY"= "${ak}",
-                            "SECRET_KEY" = "${sk}",
                             "format" = "orc",
-                            "region" = "${region}"
+                            "use_path_style" = "true",
+                            "resource" = "${resource_name}"
                         );
                         """
     } finally {
@@ -94,11 +113,8 @@ suite("test_s3_tvf", "p0") {
     try {
         order_qt_select_2 """ SELECT * FROM S3 (
                             "uri" = "http://${outfile_url.substring(5)}0.orc",
-                            "s3.access_key"= "${ak}",
-                            "s3.secret_key" = "${sk}",
-                            "s3.endpoint" = "${s3_endpoint}",
                             "format" = "orc",
-                            "region" = "${region}"
+                            "resource" = "${resource_name}"
                         );
                         """
     } finally {
@@ -108,11 +124,9 @@ suite("test_s3_tvf", "p0") {
     try {
         order_qt_select_3 """ SELECT * FROM S3 (
                             "uri" = 
"http://${s3_endpoint}${outfile_url.substring(4, outfile_url.length() - 
1)}0.orc",
-                            "s3.access_key"= "${ak}",
-                            "s3.secret_key" = "${sk}",
                             "format" = "orc",
                             "use_path_style" = "true",
-                            "region" = "${region}"
+                            "resource" = "${resource_name}"
                         );
                         """
     } finally {
@@ -121,11 +135,8 @@ suite("test_s3_tvf", "p0") {
     try {
         order_qt_select_4 """ SELECT * FROM S3 (
                             "uri" = 
"https://${bucket}.${s3_endpoint}/regression/tvf/test_hive_text.text";,
-                            "s3.access_key"= "${ak}",
-                            "s3.secret_key" = "${sk}",
                             "format" = "hive_text",
-                            "use_path_style" = "true",
-                            "region" = "${region}"
+                            "resource" = "${resource_name}"
                         ) order by c1,c2,c3;
                         """
     } finally {
@@ -134,12 +145,9 @@ suite("test_s3_tvf", "p0") {
     try {
         order_qt_select_5 """ SELECT * FROM S3 (
                             "uri" = 
"https://${bucket}.${s3_endpoint}/regression/tvf/test_hive_text.text";,
-                            "s3.access_key"= "${ak}",
-                            "s3.secret_key" = "${sk}",
                             "format" = "hive_text",
-                            "use_path_style" = "true",
-                            "region" = "${region}",
-                            "csv_schema"="k1:int;k2:string;k3:double"
+                            "csv_schema"="k1:int;k2:string;k3:double",
+                            "resource" = "${resource_name}"
                         ) order by k1,k2,k3;
                         """
     } finally {
@@ -148,12 +156,9 @@ suite("test_s3_tvf", "p0") {
     try {
         order_qt_select_6 """ SELECT * FROM S3 (
                             "uri" = 
"https://${bucket}.${s3_endpoint}/regression/tvf/test_hive_text.text";,
-                            "s3.access_key"= "${ak}",
-                            "s3.secret_key" = "${sk}",
                             "format" = "hive_text",
-                            "use_path_style" = "true",
-                            "region" = "${region}",
-                            "csv_schema"="k1:int;k2:string;k3:double"
+                            "csv_schema"="k1:int;k2:string;k3:double",
+                            "resource" = "${resource_name}"
                         )  where k3 > 1.5  order by k3,k2,k1;
                         """
     } finally {
@@ -162,12 +167,9 @@ suite("test_s3_tvf", "p0") {
     try {
         order_qt_select_7 """ SELECT * FROM S3 (
                             "uri" = 
"https://${bucket}.${s3_endpoint}/regression/tvf/test_hive_text.text";,
-                            "s3.access_key"= "${ak}",
-                            "s3.secret_key" = "${sk}",
                             "format" = "hive_text",
-                            "use_path_style" = "true",
-                            "region" = "${region}",
-                            "csv_schema"="k1:int;k2:string;k3:double"
+                            "csv_schema"="k1:int;k2:string;k3:double",
+                            "resource" = "${resource_name}"
                         )  where k1 > 100  order by k3,k2,k1;
                         """
     } finally {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to