MCPcopy Create free account
hub / github.com/apache/datafusion / copy_to_external_object_store_test

Function copy_to_external_object_store_test

datafusion-cli/src/exec.rs:591–639  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

589 }
590 #[tokio::test]
591 async fn copy_to_external_object_store_test() -> Result<()> {
592 let aws_envs = vec![
593 "AWS_ENDPOINT",
594 "AWS_ACCESS_KEY_ID",
595 "AWS_SECRET_ACCESS_KEY",
596 "AWS_ALLOW_HTTP",
597 ];
598 for aws_env in aws_envs {
599 if std::env::var(aws_env).is_err() {
600 eprint!("aws envs not set, skipping s3 test");
601 return Ok(());
602 }
603 }
604
605 let locations = vec![
606 "s3://bucket/path/file.parquet",
607 "oss://bucket/path/file.parquet",
608 "cos://bucket/path/file.parquet",
609 "gcs://bucket/path/file.parquet",
610 ];
611 let ctx = SessionContext::new();
612 let task_ctx = ctx.task_ctx();
613 let dialect = &task_ctx.session_config().options().sql_parser.dialect;
614 let dialect = dialect_from_str(dialect).ok_or_else(|| {
615 plan_datafusion_err!(
616 "Unsupported SQL dialect: {dialect}. Available dialects: \
617 Generic, MySQL, PostgreSQL, Hive, SQLite, Snowflake, Redshift, \
618 MsSQL, ClickHouse, BigQuery, Ansi, DuckDB, Databricks."
619 )
620 })?;
621 for location in locations {
622 let sql = format!("copy (values (1,2)) to '{location}' STORED AS PARQUET;");
623 let statements = DFParser::parse_sql_with_dialect(&sql, dialect.as_ref())?;
624 for statement in statements {
625 //Should not fail
626 let mut plan = create_plan(&ctx, statement, false).await?;
627 if let LogicalPlan::Copy(copy_to) = &mut plan {
628 assert_eq!(copy_to.output_url, location);
629 assert_eq!(copy_to.file_type.get_ext(), "parquet".to_string());
630 ctx.runtime_env()
631 .object_store_registry
632 .get_store(&Url::parse(&copy_to.output_url).unwrap())?;
633 } else {
634 return plan_err!("LogicalPlan is not a CopyTo");
635 }
636 }
637 }
638 Ok(())
639 }
640
641 #[tokio::test]
642 async fn copy_to_object_store_table_s3() -> Result<()> {

Callers

nothing calls this directly

Calls 9

newFunction · 0.85
is_errMethod · 0.80
session_configMethod · 0.80
create_planFunction · 0.70
task_ctxMethod · 0.45
optionsMethod · 0.45
as_refMethod · 0.45
get_storeMethod · 0.45
runtime_envMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…