| 242 | |
| 243 | void registerDatabaseHDFS(DatabaseFactory & factory); |
| 244 | void registerDatabaseHDFS(DatabaseFactory & factory) |
| 245 | { |
| 246 | auto create_fn = [](const DatabaseFactory::Arguments & args) |
| 247 | { |
| 248 | auto * engine_define = args.create_query.storage; |
| 249 | const ASTFunction * engine = engine_define->engine; |
| 250 | const String & engine_name = engine_define->engine->name; |
| 251 | |
| 252 | /// If source_url is empty, then table name must contain full url |
| 253 | std::string source_url; |
| 254 | |
| 255 | if (engine->arguments && !engine->arguments->children.empty()) |
| 256 | { |
| 257 | if (engine->arguments->children.size() != 1) |
| 258 | throw Exception(ErrorCodes::BAD_ARGUMENTS, "HDFS database requires at most 1 argument: source_url"); |
| 259 | |
| 260 | const auto & arguments = engine->arguments->children; |
| 261 | source_url = safeGetLiteralValue<String>(arguments[0], engine_name); |
| 262 | } |
| 263 | |
| 264 | return std::make_shared<DatabaseHDFS>(args.database_name, source_url, args.context); |
| 265 | }; |
| 266 | factory.registerDatabase("HDFS", create_fn, { |
| 267 | .supports_arguments = true, |
| 268 | .is_external = true, |
| 269 | .source_access_type = AccessTypeObjects::Source::HDFS, |
| 270 | }, Documentation{ |
| 271 | .description = "A read-only database that exposes files in HDFS as tables.", |
| 272 | .syntax = "ENGINE = HDFS([hdfs_host_and_root_path])", |
| 273 | .related = {"S3", "Filesystem"}}); |
| 274 | } |
| 275 | } // DB |
| 276 | |
| 277 | #endif |
no test coverage detected