module Dag::Client::API::Table

Public Instance Methods

create_table(cluster_name, db_name, params: {}) click to toggle source
# File lib/dag/client/api/table.rb, line 21
def create_table(cluster_name, db_name, params: {})
  tbl_name = params[:table]
  raise Dag::Client::ParameterInvalid.new('table name is blank') if tbl_name.blank?

  if tbl_name !~ /\A[a-z0-9_]+\Z/
    raise Dag::Client::ParameterInvalid.new("tbl_name is invalid: #{tbl_name}")
  end

  if tbl_name.length > 128
    raise Dag::Client::ParameterInvalid.new("tbl_name is too long: #{tbl_name}")
  end

  format = params[:format]
  if format && !['csv', 'tsv', 'json', 'json_agent'].include?(format)
    raise Dag::Client::ParameterInvalid.new("format is invalid: #{format}")
  end

  comment = params[:comment]
  if comment.present? && comment !~ /\A[[:ascii:]]+\Z/
    raise Dag::Client::ParameterInvalid.new("comment is not ascii")
  end

  if comment && comment.length > 100
    raise Dag::Client::ParameterInvalid.new("comment is too long")
  end

  resource = %Q(/v1/#{cluster_name}/#{db_name}/#{tbl_name})
  parameters = {}
  if format
    parameters.merge!('format' => format)
  end
  schema = params[:schema]
  if schema
    parameters.merge!('schema' => params[:schema])
  end

  if comment
    parameters.merge!('comment' => comment)
  end

  # Table Check
  if params[:create_api] && response = table(cluster_name, db_name, tbl_name)
    if response['tableName'] == tbl_name
      raise Dag::Client::TableAlreadyExists.new('Table already exists')
    end
  end

  execute(RestParameter.new(:put, resource, cano_resource: 'table', content_type: 'application/json', parameters: parameters))
end
delete_table(cluster_name, database_name, tbl_name) click to toggle source
# File lib/dag/client/api/table.rb, line 113
def delete_table(cluster_name, database_name, tbl_name)
  execute(RestParameter.new(:delete, "/v1/#{cluster_name}/#{database_name}/#{tbl_name}", content_type: 'application/json', cano_resource: 'table'))
end
split_table(cluster_name, database_name, tbl_name, params) click to toggle source
# File lib/dag/client/api/table.rb, line 71
def split_table(cluster_name, database_name, tbl_name, params)
  raise Dag::Client::ParameterInvalid.new('params is blank') if params.blank?

  input_object_keys = params[:input_object_keys]
  unless input_object_keys.instance_of?(Array)
    raise Dag::Client::ParameterInvalid.new('input_object_keys is not array')
  end
  raise Dag::Client::ParameterInvalid.new('input_object_keys is blank') if input_object_keys.blank?

  input_object_keys.each do |input_object_key|
    unless input_object_key.start_with?('dag://')
      raise Dag::Client::ParameterInvalid.new("input_object_key should start with 'dag://'")
    end
  end

  input_format = params[:input_format]
  raise Dag::Client::ParameterInvalid.new('input_format is blank') if input_format.blank?
  unless ['csv', 'tsv', 'json'].include?(input_format)
    raise Dag::Client::ParameterInvalid.new("input_format is invalid:#{input_format}")
  end

  parameters = {
    'inputObjectKeys' => params[:input_object_keys],
    'inputFormat' => input_format,
    'outputDatabase' => database_name,
    'outputTable' => tbl_name,
    'clusterName' => cluster_name
  }

  label = params[:label]
  if label.present?
    parameters.merge!('label' => label)
  end

  schema = params[:schema]
  if schema.present?
    parameters.merge!('schema' => schema)
  end

  execute(RestParameter.new(:post, "/v1/", cano_resource: 'split', content_type: 'application/json', parameters: parameters))
end
table(cluster_name, database_name, tbl_name, params: {}) click to toggle source
# File lib/dag/client/api/table.rb, line 11
def table(cluster_name, database_name, tbl_name, params: {})
  resource = %Q(/v1/#{cluster_name}/#{database_name}/#{tbl_name})
  begin
    execute(RestParameter.new(:get, resource, cano_resource: 'table'))
  rescue Dag::Client::APIFailure => e
    raise e if e.api_code != "TableNotFound"
    nil
  end
end
table_info_list(cluster_name, database_name, options = {}) click to toggle source
# File lib/dag/client/api/table.rb, line 6
def table_info_list(cluster_name, database_name, options = {})
  resource = %Q(/v1/#{cluster_name}/#{database_name})
  execute(RestParameter.new(:get, resource, cano_resource: 'table', query_params: list_params(options)))
end

Private Instance Methods

default_schema(format) click to toggle source
# File lib/dag/client/api/table.rb, line 119
def default_schema(format)
  case format
  when 'csv', 'tsv'
    'v array<string>'
  when 'json'
    'v map<string, string>'
  when 'json_agent'
    'time int, v map<string, string>'
  end
end