Tuesday, February 26, 2013

CASTing

This article is written in English and Portuguese
Este artigo está escrito em Inglês e Português

English version:

I recently exchange some information with a person who is deeply involved with Eclipse and Hybernate. This person complains (not necessarily without reason) that these tools support for Informix is poor (or that Informix doesn't support some things used by these frameworks that apparently are supported by other databases). In these cases, sometimes patches are built for the tools, or some improvements are made on the engine. But there is yet another option that may work sometimes.... The last interaction refers to the way we allow BOOLEAN literals to be written. By default we use "t' for TRUE and 'f' for FALSE. Other systems apparently support 1 and 0 for example.
So, what's the third alternative? Simply use Informix extensibility to fulfill some functionality that is missing. Let's see an example:

DROP TABLE IF EXISTS test_boolean;
CREATE TABLE test_boolean
(
        col1 BOOLEAN
);
INSERT INTO test_boolean VALUES (1);

If we run this on a v11.70.xC7 version we get:

9632: Value does not match the type of column (col1).

This happens because the INSERT expects a BOOLEAN and we're providing an INTEGER. But similar situations (data type conversion) sometimes happen without error. Why? Because the engine knows how to convert between those types. And we can "teach it" more casts. Let's change the test case a bit:

DROP TABLE IF EXISTS test_boolean;
DROP FUNCTION IF EXISTS cast_int_to_boolean;
DROP CAST IF EXISTS (INT AS BOOLEAN);

CREATE TABLE test_boolean
(
        col1 BOOLEAN
);

CREATE FUNCTION cast_int_to_boolean (i INT) RETURNING BOOLEAN;
IF i = 1 THEN
        RETURN 't';
ELSE
        RETURN 'f';
END IF;
END FUNCTION;

CREATE IMPLICIT CAST (INT AS BOOLEAN WITH cast_int_to_boolean);
INSERT INTO test_boolean VALUES (1);
INSERT INTO test_boolean VALUES (0);
SELECT * FROM test_boolean

Now, this returns

col1

   t
   f

Why? Because now the engine knows how to convert between the INTEGER we're providing and the BOOLEAN that it requires.
This also works when we run:

SELECT * FROM test_boolean WHERE col1 = 1;

The result is:

col1

   t

This happens because the engine tries to cast the integer we provide (1) to the column type. If it tried to do the opposite it would fail because it still doesn't know how to convert a BOOLEAN to INT.
This can be seen if we run:

SELECT col1::INT FROM test_boolean WHERE col1 = 1;

and we get:

9634: No cast from boolean to integer.

Naturally we can overcome this if we create a new cast (BOOLEAN to INT) like this:

CREATE FUNCTION cast_boolean_to_int (i BOOLEAN) RETURNING INT;
IF i  THEN
        RETURN 1;
ELSE
        RETURN 0;
END IF;
END FUNCTION;
CREATE IMPLICIT CAST (BOOLEAN AS INT WITH cast_boolean_to_int);

And then we get:

col1

   1

So, yet another example about how to take advantage of Informix extensibility to overcome some annoyances. In any case, just a few warnings:

  • I used functions written in SPL. As I've shown before, this may not be the ideal in terms of performance. A C UDR would be better from that point of view
  • The CAST will only allow the engine to understand other ways to represent the BOOLEAN values. It will not change the default representation when you do a SELECT. This may still confuse the tools (?)
  • It would be better if the tools recognize the database particularities. This method would force the user (DBA) to create and possibly maintain functions in every database used by the tools
  • For simplicity I assumed 1 as TRUE and anything else as FALSE. It would be better to accept only 1 and 0 and raise an exception on anything else
Some references:



Versão Portuguesa:

Recentemente troquei impressões com alguém que está bastante envolvido com Eclipse e Hybernate. A pessoa em causa queixa-se (não necessariamente sem razão), que o suporte ao Informix destas ferramentas é pobre (ou que o Informix não suporta algumas coisas que estas frameworks usam e que são suportadas por outras bases de dados). Nestes casos, algumas vezes são criadas correções nas ferramentas ou alguns melhoramentos são feitos no motor. Mas existe ainda outra opção que pode funcionar em algumas situações... Na última interação discutimos a forma como aceitamos que expressões BOOLEAN sejam representadas. De base o Informix usa o "t" para verdadeiro (TRUE) e "f" para falso (FALSE). Aparentemente outros sistemas aceitam o 1 e o 0 por exemplo.
Portanto, qual é a terceira alternativa? Simplesmente usar a extensibilidade do Informix para preencher algum vazio de funcionalidade. Vejamos um exemplo:

DROP TABLE IF EXISTS test_boolean;
CREATE TABLE test_boolean
(
        col1 BOOLEAN
);
INSERT INTO test_boolean VALUES (1);

Se executarmos isto numa instância na versão 11.70.xC7 obtemos:

9632: Value does not match the type of column (col1).

Isto acontece porque o INSERT espera um BOOLEAN e estamos a fornecer um INTEGER. Mas situações semelhantes (conversão de dados) podem acontecer sem erros. Porquê? Porque o motor sabe como converter entre esses tipos de dados. E nós podemos "ensinar-lhe" mais CASTs. Vamos modificar o caso de teste um pouco:

DROP TABLE IF EXISTS test_boolean;
DROP FUNCTION IF EXISTS cast_int_to_boolean;
DROP CAST IF EXISTS (INT AS BOOLEAN);

CREATE TABLE test_boolean
(
        col1 BOOLEAN
);

CREATE FUNCTION cast_int_to_boolean (i INT) RETURNING BOOLEAN;
IF i = 1 THEN
        RETURN 't';
ELSE
        RETURN 'f';
END IF;
END FUNCTION;

CREATE IMPLICIT CAST (INT AS BOOLEAN WITH cast_int_to_boolean);
INSERT INTO test_boolean VALUES (1);
INSERT INTO test_boolean VALUES (0);
SELECT * FROM test_boolean

Agora, isto retorna
col1

   t
   f

Porquê? Porque agora o motor sabe como converter entre o INTEGER que estamos a fornecer e o BOOLEAN que está à espera.
Isto também funciona quando corremos:

SELECT * FROM test_boolean WHERE col1 = 1;

e obtemos:

col1

   t

Isto acontece porque o motor tenta converter o INTEGER que fornecemos (1) para o tipo de dados da coluna. Se tentasse fazer o oposto, falharia porque ainda não sabe como converter um BOOLEAN to INTEGER
Isto pode ser verificado se executar-mos:

SELECT col1::INT FROM test_boolean WHERE col1 = 1;

e obtemos

 9634: No cast from boolean to integer.

Naturalmente podemos ultrapassar isto de criar-mos um novo CAST (BOOLEAN para INTEGER) desta forma:

CREATE FUNCTION cast_boolean_to_int (i BOOLEAN) RETURNING INT;
IF i  THEN
        RETURN 1;
ELSE
        RETURN 0;
END IF;
END FUNCTION;
CREATE IMPLICIT CAST (BOOLEAN AS INT WITH cast_boolean_to_int);

E obtemos:

col1

   1

Temos assim mais um exemplo das vantagens da extensibilidade do Informix, e de como a podemos utilizar para ultrapassar algumas inconveniências. Em todo o caso, alguns avisos:
  • Usei funções escritas em SPL. Conforme eu já mostrei antes, isto pode não ser o ideal em termos de performance. Um UDR em C seria melhor desse ponto de vista
  • O CAST apenas permite ao motor entender outras representações para valores BOOLEAN. Não muda a forma como o motor representa esses valores por omissão, quando se faz um SELECT . Isto poderá confundir as ferramentas (?)
  • Seria melhor que a ferramenta reconhecesse as particularidades de cada base de dados. Este método forçaria o utilizador (DBA) a criar e possivelmente manter funções em cada base de dados onde deseje utilizar as ferramentas
  • Por simplicidade assumi o 1 como verdadeiro e qualquer outra coisa como falso. O mais correto seria assumir 1 como verdadeiro, 0 como falso e causar uma excepção para qualquer outro valor
Algumas referências:

Thursday, February 07, 2013

Gartner MQ Data Warehouse DBSMs

This article is written in English and Portuguese
Este artigo está escrito em Inglês e Português


English version:

While we wait for the upcoming webcast about Informix's new version (The new IBM Informix: It's simply powerful), new interesting things are happening... A few days ago, Fred Ho pointed out that the Gartner 2012 Magic Quadrant for Data Warehouse Database Management Systems was published and that it mentioned Informix.
If you don't follow this kind of analysts publications you may not know the impact they have on large customers and the talks generated around it. It's huge.
To be honest, the reference to Informix does not appear as a positive statement. Basically it says that the only real in-memory technology that IBM has around the datawarehouse area is Informix Warehouse Edition and that IBM should increase the capabilities in this kind of technology to stay competitive.
So, you may wonder why I'm so interested in this report? Well, surely, working for IBM I appreciate the fact that we moved along the "completeness of vision" axis, getting closer to the leader - Teradata - , but this blog is about Informix....
Fred Ho already made some very interesting comments about the recent evolution of the Informix Warehouse Accelerator, but I'd like to highlight a few others...:
  • From a brief search, the last time Informix was mentioned in a Gartner report was in 2001, and it did not look good. Gartner wrote at the time that IBM's strategy for Informix was not reassuring for customers
  • Informix warehouse accelerator is really IBM's offering for in-memory DW. As mentioned in the report, IBM has other products that use in-memory technology like SolidDB and Cognos, but these are not DW repositories. This means for sure that, accordingly to Gartner, Informix is filling an important segment of IBM portfolio for DW DBMS (which as a high rank regarding the "completeness of vision")
  • Gartner seems to imply that the Informix product is not enough to compete with others. This statement puzzles me because of the following comparison points with the competition:
    • Oracle put together a system that they call Exalytics which includes TimesTen (a competitor of IBM's SolidDB), ESSBase (competitor of IBM Cognos) and some more BI suite components in an hardware box, wrapped with the usual Oracle complexity.
      I see no real innovation here, besides the usual mix, load and discount, compared with specialized technology originated in IBM's research Blink project
    • Microsoft included in-memory technology in SQL Server in the form of the so called Column Store indexes (makes the tables read-only and have several other limitations).
      Again, some of the concepts are similar, but IWA is more flexible and simpler to use
    • SAP with HANA is perceived as the big player, but Gartner mentions customer issues with stability and also refers that the majority of the customers have less than 1TB of data (a value perfectly reasonable for IWA)
  • IWA will see big improvements in the upcoming version, both in features and flexibility. It already scales, is simple and you also gain the regular Informix performance, flexibility and reliability
So, let's wait for the next release, and let's also keep an eye on next year's Gartner report... We never know... It may have new references to Informix like other analysts did (Bloor and Ovum)


Versão Portuguesa:


Enquanto aguardamos pelo próximo webcast sobre a nova versão do Informix (The new IBM Informix: It's simply powerful), estão a acontecer novidades interessantes... Há alguns dias atrás, Fred Ho notou que o Gartner 2012 Magic Quadrant for Data Warehouse Database Management Systems foi publicado e que menciona o Informix.
Se não segue este tipo de publicações dos analistas, pode não estar ao corrente do impacto que têm junto dos grandes clientes e as conversas que se geram em torno das mesmas. É imenso.

Para ser honesto, a referência ao Informix não parece uma afirmação positiva. Basicamente é dito que a única oferta da IBM em termos de tecnologia in-memory no portfolio de datawarehouse é o Informix Warehouse Edition, e que a IBM devia aumentar a sua oferta neste tipo de tecnologia para se manter competitiva

Pode estar a interrogar-se porque é que estou tão interessando neste relatório? Bom, trabalhando para a IBM aprecio que nos tenhamos deslocado no eixo de "completeness of vision", aproximando-nos do líder - Teradata - , mas este blog é sobre Informix...

Fred Ho já teceu alguns comentários interessantes sobre a recente evolução do Informix Warehouse Accelerator, mas gostaria de salientar alguns outros:

  • Segundo uma rápida pesquisa, a última vez que o Informix terá sido referido num relatório da Gartner foi em 2001 e não foi para elogiar. Na altura a Gartner escreveu que a estratégia da IBM não estava a sossegar os clientes
  • O Informix warehouse accelerator é realmente a oferta da IBM para DW in-memory. Como é referido no relatório, a IBM  tem outros produtos que usam tecnologia in-memory como o SolidDB ou o Cognos, mas estes não são repositórios de DW. Isto significa naturalmente que, de acordo com a Gartner, o Informix preenche um segmento importante do portfolio da IBM para DW DBMS (que tem uma classificação muito alta relativamente a "completeness of vision")
  • A Gartner parece sugerir que o Informix não será suficiente para fazer face à concorrência. Esta sugestão confunde-me devido aos seguintes pontos comparativos com a concorrência:
    • A Oracle juntou no que chama Exalytics, o TimesTen (concorrente do SolidDB da IBM), ESSBase (concorrente do Cognos da IBM) e mais alguns componentes da suite de BI numa caixa/hardware, embrulhada na habitual complexidade Oracle.
      Não vejo nada realmente inovador, para além do habitual mix, junta e desconta, comparado com tecnologia especializada originada no projecto Blink da IBM research
    • A Microsoft incluiu tecnologia in-memory no SQL Server, sob a forma dos chamados Column Store indexes (colocam as tabelas em modo de leitura apenas, e têm outras limitações). Se alguns dos conceitos são semelhantes, o IWA é mais flexível e simples de usar
    • A SAP com o HANA é aceite como o grande player mas a Gartner refere problemas de clientes relativamente a estabilidade e ainda refere que a maioria dos clientes estão a usar menos de 1TB de dados (um valor muito razoável para o IWA)
  • O IWA verá grandes melhorias na versão que está para sair, tanto em funcionalidade como em flexibilidade. Já é escalável, simples e ainda ganhamos a performance, flexibilidade e resiliência habituais do Informix
Portnato, vamos aguardar pela próxima versão, e vamos também manter um olhar atento ao relatório da Gartner do ano que vem... Nunca se sabe... Pode ter novas referências ao Informix como outros analistas já fizeram (Bloor e Ovum)

Monday, February 04, 2013

Want to know more about next Informix version? / Quer saber mais sobre a próxima versão do Informix?

This article is written in English and Portuguese
Este artigo está escrito em Inglês e Português

English version:

There's no secret to anyone that IBM is preparing the next Informix version. Selected customers have been trying early versions since around October last year. Jerry Keesee the development manager blogged about it, and Praddep Kutty, technical support manager did the same
 Now that we're getting closer to the release we can unveil some more information regarding the new features. I won't go into much detail, but here's an overview:
  • Improved OLAP capabilities
  • New Flexible Grid possibilities
  • Enhanced OAT
  • Extended SQL compatibility
  • Flexible configuration 
But if you really want to know more about what's around the corner, you should attend an upcoming webcast presented by Jerry Keesee and John Miller on March 26.
Please register at:

http://event.on24.com/r.htm?e=571631&s=1&k=6740A7076E0FE9C59EBFDC80C8487D34&partnerref=IBM01



Versão Portuguesa:

Não é segredo que a IBM está a preparar a próxima versão do Informix. Alguns clientes estão já a testar versões pré-release desde Outubro do ano passado. Jerry Keesee, responsável pelo desenvolvimento escreveu sobre isto no seu blog, e o Praddep Kutty, responsável pelo suporte técnico fez o mesmo
Agora que nos estamos a aproximar da data de disponibilização da nova versão, podemos levantar um pouco o véu sobre as novas funcionalidades. Não irei entrar em grandes detalhes, mas de uma forma geral serão:

  • Capacidades OLAP melhoradas
  • Novas possibilidades do Flexible Grid
  • OAT melhorado
  • Compatilibidade extendida de SQL
  • Configuração fléxivel
Mas se realmente quer saber mais sobre o que está ao virar da esquina, deve assistir ao próximo webcast, apresentado pelo Jerry Keesee e John Miller, no dia 26 de Março.
Por favor registe-se em:

http://event.on24.com/r.htm?e=571631&s=1&k=6740A7076E0FE9C59EBFDC80C8487D34&partnerref=IBM01