# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This file involves storage plugins configs, which can be updated on the Drill start-up.
# This file is in HOCON format, see https://github.com/typesafehub/config/blob/master/HOCON.md for more information.

"storage": {
  cp: {
    type: "file",
    connection: "classpath:///",
    formats: {
      "csv" : {
        type: "text",
        extensions: [ "csv" ],
        delimiter: ","
      }
    }
  }
}
"storage": {
  dfs: {
    type: "file",
    connection: "hdfs:///",
    workspaces: {
      "root": {
        "location": "/",
        "writable": false,
        "defaultInputFormat": null,
        "allowAccessOutsideWorkspace": false
      }
    },
    formats: {
      "parquet": {
        "type": "parquet"
      }
    },
    enabled: false
  }
}
"storage": {
  mongo : {
    type:"mongo",
    connection:"mongodb://test_host:27017/",
    enabled: true
  }
}
"storage": {
  openTSDB: {
    type: "openTSDB",
    connection: "http://localhost:8888",
    enabled: true
  }
}
