Запись в KDB с использованием qJava

Я не очень хорош с KDB (в случае, если вопрос звучит глупо). Я пытаюсь использовать kdb (диск, а не память), чтобы загрузить все мои данные из базы данных. Я уже задавал вопрос об upserts и подумал, как выполнить консоль и сохранить на диск

q)dsPricing:([id:`int$(); date:`date$()] open:`float$();close:`float$();high:`float$();low:`float$();volume:`int$())
q)dsPricing:([id:`int$(); date:`date$()] open:`float$();close:`float$();high:`float$();low:`float$();volume:`int$())
q)`dsPricing insert(123;2003.03.23;1.0;3.0;4.0;2.0;1000)
q)`dsPricing insert(123;2003.03.24;1.0;3.0;4.0;2.0;2000)
q)save `:dsPricing
q)`:dsPricing upsert(123;2003.03.25;1.0;3.0;4.0;2.0;1500)

Теперь я пытаюсь сделать это на Java и иметь следующий код

public class LoadDS {
SqlSession session;
private DataStreamMapper mapper ;
public static void main(String args[]){
     final QConnection q = new QBasicConnection(args.length >= 1 ? args[0] : "localhost", args.length >= 2 ? Integer.parseInt(args[1]) : 5001, "user",
                "pwd");

     LoadDS l=new LoadDS();

      l.session = MyBatisConnectionFactory.getSqlSessionFactory("SMALLS").openSession();
      l.mapper = l.session.getMapper(DataStreamMapper.class);
      List<DataStream> prices = l.mapper.selectHistoricalPrices(1);
      try {
          q.open();
        q.sync("upsert", "'dsPricing", l.getData(prices));
    } catch (QException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

// dsPricing:([id:`int$(); date:`date$()] open:`float$();close:`float$();high:`float$();low:`float$();volume:`int$())
 private Object[] getData(List<DataStream> prices) {

        final Object[] data = new Object[] {new int[prices.size()], new QDate[prices.size()],
                                            new float[prices.size()], new float[prices.size()],
                                            new float[prices.size()],new float[prices.size()],
                                            new int[prices.size()]

        };
        for ( int i = 0; i < prices.size(); i++ ) {

             ((int[]) data[0])[i] = prices.get(i).getInfoCode();
            ((QDate[]) data[1])[i] = new QDate(prices.get(i).getMarketDate());
            ((float[]) data[2])[i] = (float)prices.get(i).getOpen_();
            ((float[]) data[3])[i] = (float)prices.get(i).getClose_();
            ((float[]) data[4])[i] = (float)prices.get(i).getHigh();
            ((float[]) data[5])[i] = (float)prices.get(i).getLow();
            ((int[]) data[6])[i] = (int)prices.get(i).getVolume();
        }

        return data;
    }

}

Может кто-нибудь сказать мне, что я делаю не так? Данные не сохраняются, и я попробовал несколько вариантов. Я бы предпочел просто загрузить данные из SQL и сохранить их на диск для моей начальной загрузки.

2 ответа

Возможно, вы захотите заменить "dsPricing" (обратите внимание на дополнительный апостроф) на "dsPricing" или, возможно, ":dsPricing". qJava преобразует строки в символы, поэтому "dsPricing" отправляется так же, как вы получили бы в q, написав "$" "dsPricing".

Спасибо Чарльзу Скелтону из Kx Systems

public static void main(String[]args){
  try{
    c c=new c("",5001);
    c.k("addData",new Object[]{new int[]{1,1},
                               new Date[]{Date.valueOf("1994-2-17"),Date.valueOf("1994-2-16")},
                               new double[]{73.,76.},
                               new double[]{73.,76.},
                               new double[]{76.,77.899994},
                               new double[]{73.,75.},
                               new int[]{2223000,3167000}});
    c.close();
  }
  catch(Exception e){
    e.printStackTrace();
  }
}

затем подтвердите данные

  q)addData:{`:dsPricing/ upsert flip `id`date`open`close`high`low`volume!x;}
    q)select from `:dsPricing
    id date      | open close high     low volume 
    -------------| -------------------------------
    1  1994.02.17| 73   73    76       73  2223000
    1  1994.02.16| 76   76    77.89999 75  3167000
Другие вопросы по тегам