#virtual7

virtual7@pod.dapor.net

A Day in a Life as a Business Intelligence Developer

with Gerhard Höll

Many paths lead to the goal if you want to become a Business
Intelligence Developer. There is no defined route, much more important
is the fun and enthusiasm for this job. Gerhard has always been
interested in the BI environment and enjoyed working in it the most. In
his studies in Business Informatics, he got to know the whole range of
BI, from Business Intelligence to Data Warehousing and Data Analytics.
In his role as Recruiting Support, he can give you important tips about
his job that can increase your chances of landing your dream job.

::: {.wp-block-spacer style="height: 15px;"}
:::

Are there any main tasks that arise on a daily basis?

That depends on the project. As a developer, not really, apart from the
coordination rounds within the development team.  I am currently
involved in a project in which I have contact with the business side,
DWH operations and the developers of the source system. In this project,
the entire spectrum of data warehouse development is covered -- from
requirements gathering to development and operation. We look at making
sure the data warehouse is running smoothly and that up-to-date data is
being delivered daily for users to work with. When you come in after
your morning coffee, the first task that comes up is to see if the load
runs have gone correctly. It is important that the business users can
work with the BI and DWH system.

::: {.wp-block-spacer style="height: 15px;"}
:::

{.wp-image-58454
width="1024" height="683"}

::: {.wp-block-spacer style="height: 0px;"}
:::

What influence do you have on the customer's work?

Efficiency and benefit should always be at the priority to make sure
that the customer gets the most value from what we do. You can avert or
recommend various things that can harm or benefit the system. In this
way you can influence customers in their decisions. In the area of
evaluations and graphical presentations, you also have influence on the
use of the various presentation options. The goal is always to recognize
facts and contexts more quickly through the evaluations in order to gain
new insights.

::: {.wp-block-spacer style="height: 0px;"}
:::

What do you enjoy the most?

The best part of my job is dealing with issues together with my
colleagues and finding solutions together. You are involved in exchanges
and coordination on a wide variety of topics. Both at the customer's
site and with colleagues at virtual7.  It is always a welcome change to
work together with other people and not just to develop in a quiet room.
Of course, that also has to be done, but the variety and interaction is
crucial for me here.

::: {.wp-block-spacer style="height: 0px;"}
:::

Which skills are essential for a job at virtual7?

The requirements are first of all of a technological nature, of course.
Since we work with Oracle products, you should be familiar with Oracle
technologies. These include: The Oracle Database, SQL and PL/SQL, Oracle
Data Integrator and Oracle Analytics Server. You will also need to be
familiar with the methods to create data warehouse architectures and
models, dashboards and analytics. Since we are always working with
different people and teams, soft skills are just as important, if not a
bit more important. Communication is especially important here. You have
to be able to ask the right questions. Likewise, being able to present
and explain complicated issues in a simple way. The knowledge level and
perspectives of individuals on different aspects can vary greatly, so
you need to have an understanding and background knowledge of the
project and the subject area. It is not always easy to get everyone
involved on the same page. Apart from that, you need to be a team player
and be able to organize yourself in your team. As a developer you always
need a good grasp and analytical thinking, as well as convincing
presentation skills.

::: {.wp-block-spacer style="height: 0px;"}
:::

{.wp-image-58453
width="1024" height="683"}

::: {.wp-block-spacer style="height: 0px;"}
:::

Is Oracle a must have to work for us?

Our clients make it a point to see in resumes that you have experience
with Oracle. So hard facts: X/Y years of Oracle experience. Everything
that is Oracle-specific about the tools can be learned quickly.
Methodological knowledge in the data warehouse and BI environment are
much more important in our projects. You should know modeling approaches
and how to represent certain facts and justify them. It is important to
be honest about your experience, this will bring you and us much further
than a pimped CV.

::: {.wp-block-spacer style="height: 0px;"}
:::

Good to know that...
  • virtual7 likes to celebrate successes together.
  • the job is not just a consulting assignment, but a safe place to work for several years.
  • you mainly work at the customer's and can also do a lot at virtual7.
  • team building is huge internally, be it at the conference, chat 'n' chills or meet-ups.
  • you can be yourself and (almost) everything is informal.

Der Beitrag <strong>A Day in a Life as a Business Intelligence
Developer</strong>

erschien zuerst auf virtual7 GmbH - Blog.

https://blog.virtual7.de/a-day-in-a-life-as-a-business-intelligence-developer/

#virtual7 #digitalisierung #deutschland #virtual #digitalezukunft #digital #zukunft #agile #virtual7gmbh #BI #job #Oracle #Recruiting #SQL

virtual7@pod.dapor.net

virtual7 at the Pitch Club Developer Edition

*To give everyone a chance to understand Felix's interview, we have
translated the original
interview
.

Felix is a Technical Consultant at virtual7 in Karlsruhe. Members of the PCDE talked to him about his tasks in the company and learned why his title only partially reflects his day-to-day work. He also talks about his experiences at virtual7, future challenges, and his participation at the P*CDE.*

::: {.wp-block-spacer style="height: 25px;"}
:::

Who are you and what are your tasks at virtual7?

Hey, I'm Felix and my official job title is Technical Consultant.
However, my tasks are much better described by my Roles in the company.
For example, I have the Role of „DevOps Engineer", in which I support
DevOps applications at one of our customers. In addition to my work with
customers, I also have the Role of „Content Creator", in which I help
produce our podcasts, write articles for the virtual7 magazine, or
report on why it's worth applying for a job at virtual7. I also really
enjoy the Role of „Technical Presales". Here I support our Core Cluster
Sales in winning new customers by contributing my technical knowledge to
the applications.

::: {.wp-block-spacer style="height: 25px;"}
:::

What do you appreciate most about virtual7 as an employer?

There are a few aspects I would like to mention in this context. I think
you can recognize the most important one from the answer to the previous
question: The versatility of the tasks. Instead of just working quietly
on your project, you can take on responsibility and contribute in a wide
range of areas. The fact that something like this is possible is due to
our responsive corporate organization. In addition to the varied tasks,
I appreciate the fact that we communicate very transparently about both
successes and difficulties.

What kind of company culture can new colleagues expect at your company?

Responsiveness is a key factor here. This means that each Cluster
(something like a department) is self-organized and does not have a
classic head or a typical hierarchy. Instead, tasks are divided among
different Roles and employees. If you want to know more about this, you
can listen to episode 16 of our german
podcast. This allows us to work in a
very agile way and, above all, to involve each individual with his or
her ideas right from the start.

::: {.wp-block-spacer style="height: 25px;"}
:::

Where do you see the biggest challenges for your Cluster in the future?

I would say that at this point you have to mention employee recruitment.
It's an open secret at the moment that talented applicants can more or
less choose their employer. Of course, as an IT service provider, we are
also affected by this development. However, I think that we as a team,
as a company, and the way we are organized have enough arguments to
convince enough future colleagues in the coming years.

::: {.wp-block-spacer style="height: 25px;"}
:::

In which role did you have experience with the PCDE?

I only know the PCDE from the applicant's side. So I didn't have to
sweat too much! Nevertheless, I can imagine switching sides next time
and convincing others to work for us. So with a bit of luck, you'll soon
get to meet me in person.

::: {.wp-block-spacer style="height: 25px;"}
:::

What did you like most about the PCDE?

Breaking through the black box that opens up when you send your
application to hr\@firma-x.de appealed to me the most. Instead of
sending your resume through departments, your future „Team Development"
is sitting right in front of you. „Team Development" is a Role at our
company that takes care of the personal development of our employees.
This gives you the chance to see right away whether you fit into the
company in terms of structure, content, and, above all, personality.

::: {.wp-block-spacer style="height: 25px;"}
:::

Would you recommend your best friend to attend PCDE?

Now, this sounds a lot like one of those „we want your feedback" emails
you get every day. But yes, I would recommend everyone, including my
best friend, to participate in the PCDE. In the best case, you'll find
the right employer for you, in the worst case, you'll get free pizza. 

Der Beitrag virtual7 at the Pitch Club Developer
Edition

erschien zuerst auf virtual7 GmbH - Blog.

https://blog.virtual7.de/virtual7-at-the-pitch-club-developer-edition/

#virtual7 #digitalisierung #deutschland #virtual #digitalezukunft #digital #zukunft #agile #virtual7gmbh #Allgemein #Events #event #PCDE #Podcast #Recruiting

virtual7@pod.dapor.net

Gedanken zum Datenbanktuning

Es kommt immer wieder es vor, dass (Oracle-) Datenbankanwendungen „zu
langsam" sind. Dann wird versucht herauszufinden woran es liegt und wenn
man Glück hat findet sich eine Idee das verursachende SQL-Statement so
zu ändern, dass die Anwendung „schnell genug" wird. Es wird bei diesem
ganzen Vorgang oft übersehen, dass die Ursachen(n) für die schlechte
Performance nicht erst im SQL-Statement begründet ist, sondern viel
früher ihren Ursprung hat.

Die Planung einer performanten Datenbankanwendung beginnt mit der
Planung der Datenbank. Um eine Datenbank planen zu können sollten die
Anforderungen an die mit ihr zu realisierenden Anwendungen bekannt sein.
Einige der Fragen, die für die Planung relevant sind:

\
Ist es eine ERP-Anwendung oder ein Datawarehouse?\
Gibt es Tabellen mit sehr unterschiedlichen Satzlängen?\
Wird mit der Anwendung hauptsächlich abgefragt oder Daten bearbeitet?\
Gibt es mehrere Anwendungen, die mit den Daten arbeiten sollen und haben
diese Anwendungen unterschiedliche Anwendungsmuster?

Mit den gesammelten Anforderungen kann die Physik der Datenbank geplant
werden.

::: {.wp-block-spacer style="height: 36px;"}
:::

Tablespaces und Blockgrößen {#h-tablespaces-und-blockgr-en}

Die Blockgröße(n) der Tablespaces sollten an die Anforderungen der
Anwendung angepasst werden. Zur Erinnerung: Oracle liest immer nur ganze
Blöcke und nicht einzelne Datensätze. Falls es in den Anforderungen an
die einzelnen Tabellen große Unterschiede gibt sollten die Tabellen auf
Tablespaces mit geeigneten unterschiedlichen Blockgrößen verteilt
werden.

Kleine Blockgrößen (2KB/4KB) eignen sich für kurze Satzlängen auf die
oft einzeln zugegriffen wird. Sie eignen sich nicht für lange Satzlängen
und wenn oft auf große Mengen an Datensätzen zugegriffen wird.

Große Blockgrößen (8KB -- 32KB) eignen sich für lange Satzlängen und
wenn große Datenmengen sequenziell abgefragt werden.

Falls wegen eines kleinen Datensatzes ein großer Block gelesen werden
muss oder falls wegen eines langen Datensätzes dieser auf mehrere Blöcke
verteilt werden muss (chaining), so mindert dies die Performance der
späteren Anwendung.

Gegebenenfalls lohnt es sich Tablespaces mit unterschiedlichen
Blockgrößen anzulegen.

::: {.wp-block-spacer style="height: 36px;"}
:::

Tabellen {#h-tabellen}

Die Datensätze einer Tabelle werden in den Blöcken des zu verwendenden
Tablespaces gespeichert. Sobald ein Block eines Tablespace einer Tabelle
zugewiesen ist gehört er zu dieser Tabelle, auch dann, wenn alle
Datensätze in diesem Block gelöscht wurden (high water mark). Bei einem
Full Table Scan werden auch diese inzwischen leeren Blöcke gelesen und
kosten Zeit. Oracle bietet mehrere Möglichkeiten diese Blöcke
freizugeben ( export/import, alter table .. shrink space, usw...)

Oracle vermerkt alle leeren oder teilweise leeren Blöcke einer Tabelle
in die noch Datensätze geschrieben werden dürfen in einer Freelist.\
Mit den Speicherparametern pctfree und pctused (Prozentwerte) kann
angegeben werden, unter welchen Bedingungen ein Block auf die Freelist
gesetzt oder von dieser entfernt wird. Ist der Block zu mehr als pctfree
frei, so wird der Block auf die Freelist gesetzt. Ist der Block zu mehr
als pctused belegt, so wird er von der Freelist genommen.

::: {.wp-block-spacer style="height: 36px;"}
:::

Chaining {#h-chaining}

Falls ein Datensatz nicht in einen Block passt, so wird er über mehrere
Blöcke verteilt. Dann müssen um diesen einen Datensatz zu lesen alle
diese Blöcke nacheinander gelesen werden. (Ob in einer Tabelle solche
Datensätze existieren kann z.B. in user_tables in der Spalte chain_cnt
überprüft werden)

Zu Chaining kommt es, wenn große Datensätze in (zu) kleine Blöcke
geschrieben werden, oder wenn bestehende Datensätze beim Aktualisieren
verlängert werden (z.B. wenn ein varchar2-Wert verlängert wird). Falls
der Datensatz länger ist als die Blockgröße, so lässt sich chaining
nicht verhindern. In diesem Fall kann man darüber nachdenken die Tabelle
in einen Tablespace mit größerer Blockgröße zu verschieben.

Falls die Verlängerung eines Datensatzes aufgrund der
Anwendungsanforderungen vorhersehbar ist, so kann durch setzen eines
geeigneten Werts für pctused der Tabelle dafür gesorgt werden, dass in
den Blöcken genügend freier Platz gelassen wird, so dass eine
Verlängerung eines Datensatzes in den bestehenden Block passt. Für
Tabellen mit Datensätzen, die nur einmal geschrieben und dann nicht mehr
verändert werden, kann pctused hoch gewählt werden.

Falls Datensätze regelmäßig gelöscht und neu geschrieben werden, so
sollte pctfree so gewählt werden, dass ein neuer Datensatz in den noch
freien Platz eines bereits teilweise belegten Blocks passt:

::: {.wp-block-spacer style="height: 36px;"}
:::

Beispiel {#h-beispiel}

Blockgröße: 4096 Bytes\
mittlere Satzlänge eines Datensatzes (user_tables.avg_row_len): 400
Bytes

Zwei Bemerkungen:

  • Diese mittlere Länge kann sich ändern.
  • Viele Datensätze sind sicherlich länger als 400 Bytes.

Mit „select sum(c.DATA_LENGTH) from user_tab_columns c where
c.TABLE_NAME = \$NAME\$\
können wir die maximale Länge eines Datensatzes ermitteln.

\
Beispiel a) die mittlere Datensatzlänge wäre 600 Bytes.\
Mit pctfree = 15 (4096*0,15 = 614) sind wir auf der sicheren Seite.

Beispiel b) die mittlere Datensatzlänge wäre 6000 Bytes.\
Da wir die Verteilung der Datensatzlängen nicht kennen, müssen wir eine
Annahme treffen:\
pctfree = 20 (2096*0,20 = 819) sollte für die meisten Datensätze
ausreichend sein.

Wir tauchen ein bisschen tiefer ein. Falls wir mit verlässlichern Werten
arbeiten wollen, können wir uns mit etwas Aufwand bessere Kennzahlen
ermitteln:

dump() liefert uns einen String, der u.a. die Länge in Bytes des
Ausdrucks zurückgibt:

Z.B: select dump( 'ä' ) from dual;
DUMP('Ä')
Typ=96 Len=2: 195,164

Dies nutzen wir, um die Länge der einzelnen Spalten zu ermitteln und
diese aufzusummieren.

2 Anmerkungen:

  • Jede Spalte benötigt ein zusätzliches Byte Speicherplatz. (Dies berücksichtigen wir nachfolgend)
  • NULL-Spalten (auch mehrere) am Ende eines Datensatzes benötigen keinen Speicherplatz. (Dies berücksichtigen wir nachfolgend nicht!)

mit

select '+ coalesce( to_number( regexp_substr( dump( ' || rpad( column_name, 32, ' ' ) ||q'{ ), 'Len=(\d*):', 1, 1, 'x', 1 ) ), 0) +1}' as term
from user_tab_columns
where table_name = $tabellenname$
order by column_id;

können wir uns den schreibintensiven Teil des folgenden Statements
erzeugen lassen:

with len_ as 
( select coalesce( to_number( regexp_substr( dump( ), 'Len=(\d):', 1, 1, 'x', 1 ) ), 0) +1 
+ coalesce( to_number( regexp_substr( dump( ), 'Len=(\d):', 1, 1, 'x', 1 ) ), 0) +1 + … 
+ coalesce( to_number( regexp_substr( dump( ), 'Len=(\d*):', 1, 1, 'x', 1 ) ), 0) +1 as bytes from $tabellenname$ ) 
select min(bytes), avg(bytes), max(bytes), stddev(bytes) from len_;

Hinweis: für sehr große Tabellen kann diese Auswertung lang dauern. In
diesem Fall sollte sie auf eine ausreichend große repräsentative Menge
begrenzt werden ( where rownum < X ).

Die Werte sind wegen Anmerkung 2 nicht 100% zuverlässig. Für eine
Abschätzung der Verteilung der Datensatzlängen sind sie aber
ausreichend. Unter der Annahme, dass die Längen normalverteilt sind,
kann die Mindestgröße für pctfree wie folgt bestimmt werden:

pctfree = 100 * ( avg + stddev ) / Blockgröße (für ~84% aller
Datensätze ausreichend)\
pctfree = oder 100 * ( avg + 2*stddev ) / Blockgröße (für ~98% aller
Datensätze ausreichend)

Siehe auch:

https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/physical_attributes_clause.html#GUID-A15063A9-3237-43D3-B0AE-D01F6E80B393

Der Beitrag Gedanken zum
Datenbanktuning

erschien zuerst auf virtual7 GmbH - Blog.

https://blog.virtual7.de/gedanken-zum-datenbanktuning/

#virtual7 #digitalisierung #deutschland #virtual #digitalezukunft #digital #zukunft #agile #Finance #OracleDatabase #Technology #Chaining #database #Datenbank #Oracle #Tuning